美文网首页Web程序员Web前端之路
说不完的JavaScript作用域

说不完的JavaScript作用域

作者: 简心豆 | 来源:发表于2017-03-26 18:45 被阅读90次

昨天在作某厂的笔试题,答的一塌糊涂,感觉很熟悉,却又说不出正确答案,还是因为平时真正深刻理解的东西太少,关于js的作用域问题是个永远都说不完的话题,昨天就遇到了。题目大概如下:


var user = {
    name: "jack",
    getname: function(){
        return this.name;
    }
};

var obj = user.getname;
console.log(obj()); 
console.log(user.getname()); 


问题是:输出结果是什么?

a. jack, jack;
b. jack, undefined;
c. undefined, jack;
d. undefined, undefined;
e. '', '';
f. '', jack;

相信大多数人在看js的作用域和作用域链这部分的时候都见过这个题,所以我就不假思索的选了d. undefined, undefined,事后自己敲了代码才知道大错特错。正确答案为:'', jack。我怎么都想不到的~~

所以今天就认真的分析了一下,为什么会是这个结果呢?

(1)输出'' 的原因:

首先在对象user声明结束后,定义了obj变量,并初始化,var obj = user.getname;这个过程相当于将getname()这个函数的指针赋给了obj变量,此时obj就相当于:

var obj = function(){
    return this.name;
};

此时this指向window对象,然后window有个name属性,然而window.name并没有赋值,此时就为' '。

(2)输出jack的原因:

这个比较好理解,因为user对象直接调用自己的方法,此时的this自然就是user本身,user自身有name属性,所以就输出了jack。


总结:好多时候不是问题太难,而是我们从来不往深了想,得过且过就会屡屡在同一个地方摔跟头,写这篇就是想让自己长记性。

相关文章

  • 说不完的JavaScript作用域

    昨天在作某厂的笔试题,答的一塌糊涂,感觉很熟悉,却又说不出正确答案,还是因为平时真正深刻理解的东西太少,关于js的...

  • JavaScript 作用域和作用域链

    JavaScript 作用域 作用域就是变量与函数的可访问范围。在JavaScript中,变量的作用域有全局作用域...

  • JavaScript作用域学习笔记

    @(JS技巧)[JavaScript, 作用域] JavaScript作用域学习笔记 概念: 作用域就是变量与函数...

  • 07-JavaScript作用域和预解析

    JavaScript作用域 JavaScript中有全局作用域和局部作用域 相同作用域内不能有同名的变量和函数 不...

  • 作用域、执行环境、作用域链

    作用域,之前有介绍过,JavaScript无块级作用域,只有函数作用域,简单点说就是JavaScript的作用域就...

  • javascript基础知识问答-作用域和闭包

    1.理解词法作用域和动态作用域2.理解JavaScript的作用域和作用域链3.理解JavaScript的执行上下...

  • 一网打尽 JavaScript 的作用域

    JavaScript 的作用域包括:模块作用域,函数作用域,块作用域,词法作用域和全局作用域。 全局作用域 在任何...

  • JavaScript this 绑定规则

    JavaScript 中的作用域是词法作用域。而JavaScript中的 this 却更加类似于 动态作用域的机制...

  • 作用域和闭包

    一、理解 JavaScript 的作用域、作用域链和内部原理 作用域 javascript 拥有一套设计良好的规则...

  • 2018-04-11

    JavaScript作用域链浅析 1、作用域 作用域指的是变量存在的范围。在ES5规范中,JavaScript只有...

网友评论

本文标题:说不完的JavaScript作用域

本文链接:https://www.haomeiwen.com/subject/gcvkottx.html