function f1(){
var name = 111;
function f2(){
console.log(this.name);
}
return f2();
}
f1();
新手问一下,为什么输出的值不是undefined而是空字符串
function f1(){
var name = 111;
function f2(){
console.log(this.name);
}
return f2();
}
f1();
新手问一下,为什么输出的值不是undefined而是空字符串
很明显,f1()
调用后,里面的this
指向全局
,在浏览器环境是window
,并且window.name
是指代当前浏览器窗口的名称,没有经过设置的话默认为空
。
以下内容引用 MDN
窗口的名字主要用于为超链接和表单设置目标(targets)。窗口不需要有名称。
在某些框架里(如,SessionVars 和 Dojo's dojox.io.windowName),该属性也被用于作为 JSONP 的一个更安全的备选来提供跨域通信(cross-domain messaging)。
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
这里是作为一个普通函数调用,所以this是指向全局window的。而作为对象的方法调用时,this才会指向那个对象。
补充:
因为指向window,所以访问的就是window.name,而name是DOM的一个标准属性,经常用来做跨域的一种解决方案。