账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    js闭包this对象
    48
    0
    var name = "The Window";
    var getNameFunc= {
        name: "My Object",
        getNameFunc: function() {
            return function() {
                return this.name;
            };
        }
    };
    alert(object.getNameFunc()()); //"The Window"(在非严格模式下)
    

    在高级程序设计的第7章,7.2.2关于this对象中,有几句话实在是不太明白:

    以上代码先创建了一个全局变量 name,又创建了一个包含 name 属性的对象。这个对象还包含一个方法——getNameFunc(),它返回一个匿名函数,而匿名函数又返回 this.name。由于 getNameFunc()返回一个函数,因此调用 object.getNameFunc()()就会立即调用它返回的函数,结果就是返回一个字符串。然而,这个例子返回的字符串是"The Window",即全局 name 变量的值。为什么匿名函数没有取得其包含作用域(或外部作用域)的 this 对象呢?

    前面曾经提到过,每个函数在被调用时都会自动取得两个特殊变量: this 和 arguments。内部函数在搜索这两个变量时,只会搜索到其活动对象为止,因此永远不可能直接访问外部函数中的这两个变量。

    1.只会搜索到其活动对象??? 不是有个作用域链吗?匿名活动对象在最下面,在匿名对象中找不到,那就去上面的活动对象去找咯?getNameFunc中找不到就去object去找咯。。。不就找到了吗

    2.因此永远不可能直接访问外部函数中的这两个变量???是什么意思?外部函数是指哪个?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 低吟ぃ浅唱 普通会员 1楼

      在JavaScript中,闭包是一种特殊的函数,它可以访问并修改外部函数作用域中的变量。这是因为外部函数会捕获并存储它定义时的上下文环境。

      以下是一个简单的例子,展示了如何使用闭包来创建一个函数,这个函数可以访问并修改它外部函数的变量:

      ```javascript function outerFunction() { var outerVariable = "I am outside the function";

      function innerFunction() { console.log(outerVariable); }

      return innerFunction; }

      var innerFunction = outerFunction(); innerFunction(); // 输出 "I am outside the function" ```

      在这个例子中,outerFunction返回了一个内部函数innerFunction。由于innerFunction是在outerFunction作用域中定义的,所以它可以访问并修改outerFunction的作用域中的outerVariable

      这就是闭包的使用,它可以帮助我们在函数中创建和修改变量,从而实现一些高级的函数特性。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部