Javascript 我不知道的事';我不了解';使用严格的';还有这个
据我所知,您在JavaScript中声明的所有内容都属于全局对象(除非您在对象内部声明某些内容,否则该对象将属于窗口对象,无论您在其中声明什么,都属于对象),因此,在浏览器环境中,全局对象是Javascript 我不知道的事';我不了解';使用严格的';还有这个,javascript,Javascript,据我所知,您在JavaScript中声明的所有内容都属于全局对象(除非您在对象内部声明某些内容,否则该对象将属于窗口对象,无论您在其中声明什么,都属于对象),因此,在浏览器环境中,全局对象是window 假设你声明: var x='hi' 可通过以下方式访问: x 或 window.x 两个都是完全一样的,对吗?那么,为什么在使用'use strict'时,当从“全局”变量返回此时,如果我指定所述函数属于窗口,我只能获取窗口对象 function fun() { 'use strict'
window
假设你声明:
var x='hi'
可通过以下方式访问:
x
或
window.x
两个都是完全一样的,对吗?那么,为什么在使用'use strict'
时,当从“全局”变量返回此
时,如果我指定所述函数属于窗口
,我只能获取窗口
对象
function fun() {
'use strict';
return this;
}
fun(); // undefined
window.fun(); // window object
// Aren't both absolutely the same?
另外,如果该函数应该属于obj
,为什么该函数返回undefined
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();
}
};
谢谢。
函数内部的这个
应该返回调用函数的对象(使用obj.method()
语法)
如果不使用use strict
,则如果以任何其他方式调用函数(例如,只执行func()
而不是obj.func()
),则该的值将设置为窗口。这很令人困惑use strict
确保当函数未作为对象方法调用时,此
未正确定义
那么,为什么在使用“use strict”时,当从“global”变量返回时,如果我指定所述函数属于window,那么我只能获取window对象
只需以窗口
的形式访问窗口
对象,即可获得该对象
这并不是这个
的价值所在,因为这个特性使得意外编写不安全代码变得很容易,并且带来了性能代价
:
自动装箱不仅会降低性能,而且会暴露
浏览器中的全局对象存在安全隐患,因为全局对象
对象提供对“保护”JavaScript的功能的访问
环境必须加以限制。因此,对于严格模式函数
指定此项不装箱到对象中,如果未指定,则此项
将是未定义的
另外,如果函数应该属于obj,为什么该函数返回未定义
虽然yeah
在属于obj
方法的函数范围内,yeah
本身不是obj
的方法,因为您没有将其作为一个方法调用
i、 e.因为您正在调用yeah()
而不是obj.yeah()
(或yeah.call(obg)
等)
这与“使用严格的”
无关。所以这是严格针对对象方法的,对吗?还有什么只属于某个范围的吗?另外,为什么调用setTimeout
,而没有窗口.setTimeout
语法,在使用strict
的方法内部,会返回窗口
对象?它不也应该返回undefined吗?不管怎样,它似乎是这样的,因为setTimeout
本身不会在严格模式下运行。