Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我不知道的事';我不了解';使用严格的';还有这个_Javascript - Fatal编程技术网

Javascript 我不知道的事';我不了解';使用严格的';还有这个

Javascript 我不知道的事';我不了解';使用严格的';还有这个,javascript,Javascript,据我所知,您在JavaScript中声明的所有内容都属于全局对象(除非您在对象内部声明某些内容,否则该对象将属于窗口对象,无论您在其中声明什么,都属于对象),因此,在浏览器环境中,全局对象是window 假设你声明: var x='hi' 可通过以下方式访问: x 或 window.x 两个都是完全一样的,对吗?那么,为什么在使用'use strict'时,当从“全局”变量返回此时,如果我指定所述函数属于窗口,我只能获取窗口对象 function fun() { 'use strict'

据我所知,您在JavaScript中声明的所有内容都属于全局对象(除非您在对象内部声明某些内容,否则该对象将属于窗口对象,无论您在其中声明什么,都属于对象),因此,在浏览器环境中,全局对象是
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
本身不会在严格模式下运行。