结合“use strict”会发生什么?内部功能与“使用严格”;在全球范围内?

时间:2017-09-18 13:32:57

标签: javascript

<!DOCTYPE html>
<html>
<body>
    <script>
        function useStrict(){
            "use strict";
        }
            "use strict";
            foo=10;
            alert(foo);
    </script>
</body>
</html>

导致没有错误。结论:严格模式未激活。但是如果我删除了函数定义:

<!DOCTYPE html>
<html>
<body>
    <script>
            "use strict";
            foo=10;
            alert(foo);
    </script>
</body>
</html>

我收到错误。结论:激活严格模式。但是如果我删除全局上下文中的"use strict"行并保留函数:

<!DOCTYPE html>
<html>
<body>
    <script>
        function useStrict(){
            "use strict";
        }
        foo=10;
        alert(foo);

    </script>
</body>
</html>

我没有错误。结论:严格模式未激活。这是怎么回事?

似乎当"use strict";同时处于全局上下文和函数中时,它们会被取消,因为当我删除该函数时,确实激活了严格模式。但是,如果在全局上下文中没有"use strict";行,但在函数内部,则不会激活严格模式,这对我来说是意料之外的。如果函数调用中的"use strict";本身没有激活严格模式,它们怎么能取消呢?

1 个答案:

答案 0 :(得分:1)

您的第一个脚本,用于上下文:

function useStrict() {
    "use strict";
}

"use strict";
foo = 10;
alert(foo);

"use strict"仅在脚本顶部生效。它之前的function useStrict()使它不在顶部。如果将它移到顶部,它将起作用。

"use strict";

function useStrict() {
    "use strict";
}

foo = 10;
alert(foo);

否则它与"use mayonnaise"具有相同的语义。