Javascript:为什么执行上下文默认为独立函数的全局或窗口?

时间:2016-06-10 06:38:45

标签: javascript

在下面的代码中:

var x = {
    y: function() {
        console.log(this === global); // false
        function z() {
            console.log(this === global); // true
        };
        z();
    }
};

x.y();

当您致电y时,您正在提供x的执行上下文。因此this是x对象。

为什么z的执行上下文是全局对象(或浏览器中的窗口对象)?

似乎无法按照定义的方式为z创建不同的执行上下文。即this.z()global.z()x.z()y.z()所有错误,表明该执行上下文中没有z函数的消息。

因此,在全局对象的执行上下文中定义function name() {}形式定义的函数是总是是真的吗?并且除非使用call / bind / apply来调用函数,否则执行总是在全局对象上下文中?

问题:为什么这种形式的函数function name() ...在全局上下文中定义而不是在它写入的对象的上下文中定义?

以上内容是对本文的回应:http://www.digital-web.com/articles/scope_in_javascript/

“如果我们只是称之为正常的日常功能......

 <script type="text/javascript"> 
  function test_this() { 
   return this; 
  } 
  var i_wonder_what_this_is = test_this(); 
 </script>

在这种情况下,我们没有提供新的上下文,也没有给出一个背景形式的上下文来捎带。在这里,这默认引用它可以做的最全局的事情:对于网页,这是窗口对象。“

0 个答案:

没有答案