据我所知,您在JavaScript中声明的所有内容都属于全局对象(除非您在对象内部声明某些内容,然后该对象将属于该窗口对象,并且无论您在其中声明什么内容,都属于因此,在浏览器环境中,全局对象是window
。
说你宣布:
var x = 'hi'
可以通过以下方式访问:
x
或
window.x
两者完全一样,对吗?那么,为了'use strict'
,从全球'返回this
时,为什么呢?变量,如果我指定所述函数属于window
,我是否只能获取window
对象?
function fun() {
'use strict';
return this;
}
fun(); // undefined
window.fun(); // window object
// Aren't both absolutely the same?
另外,如果函数属于undefined
,为什么这个函数会返回obj
?
obj = {
method: function () {
'use strict';
function yeah() { // Doesn't this belong to obj?
return this; // It certainly doesn't seem that 'yeah'
} // belongs to window.
return yeah();
}
};
感谢。
答案 0 :(得分:0)
this
应该返回调用该函数的对象(使用obj.method()
语法)。
如果以任何其他方式调用该函数,则use strict
的{{1}}值将设置为this
(例如,只需执行window
而非{{1} }})。这很令人困惑。 func()
确保在未将函数作为对象方法调用时,obj.func()
未正确定义。
答案 1 :(得分:0)
为什么,当使用'使用严格的'时,从全球'返回?变量,如果我指定所述函数属于窗口,我可以只获取窗口对象吗?
您只需将window
对象作为window
访问即可获得该对象。
它不会成为this
的价值,因为该功能很容易意外地编写不安全的代码并带来性能成本。
自动装箱不仅是性能成本,而是暴露出来 浏览器中的全局对象是一种安全隐患,因为全局 object提供了对" secure" JavaScript的 环境必须限制。因此对于严格的模式功能, 指定这个没有装入一个对象,如果没有指定,这个 将是未定义的
另外,如果函数应该属于obj,那么为什么这个函数返回undefined?
虽然yeah
属于obj
方法的函数范围,但yeah
本身并不是obj
的方法,因为你不是&#39 ; t称之为一个。
即。因为您拨打的是yeah()
而非obj.yeah()
(或yeah.call(obg)
等)。
这与"use strict"
无关。