闭包中this的问题

新手上路,请多包涵
function f1(){
  var name = 111;
  function f2(){
    console.log(this.name);
  }
  return f2();
}
f1();

新手问一下,为什么输出的值不是undefined而是空字符串

阅读 1.9k
3 个回答

这里是作为一个普通函数调用,所以this是指向全局window的。而作为对象的方法调用时,this才会指向那个对象。

补充:
因为指向window,所以访问的就是window.name,而name是DOM的一个标准属性,经常用来做跨域的一种解决方案。

这里面的this指向window。window.name输出就是''

很明显,f1()调用后,里面的this指向全局,在浏览器环境是window,并且window.name是指代当前浏览器窗口的名称,没有经过设置的话默认为

以下内容引用 MDN

窗口的名字主要用于为超链接和表单设置目标(targets)。窗口不需要有名称。
在某些框架里(如,SessionVars 和 Dojo's dojox.io.windowName),该属性也被用于作为 JSONP 的一个更安全的备选来提供跨域通信(cross-domain messaging)。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题