首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >生活背景问题

生活背景问题
EN

Stack Overflow用户
提问于 2011-10-05 04:39:34
回答 2查看 3.5K关注 0票数 8

在以下构造中:

代码语言:javascript
运行
复制
(function(){

    var x = function(){
        alert('hi!');
    }

    var y = function(){
        alert("hi again!");
    }

    this.show = function(){
        alert("This is show function!");
    }

})();

为什么this引用window对象?生活中的一切都应该与全球范围隔绝吗?xy函数也是window全局对象的属性吗?

此外,即使我在开头使用put var h = ...

代码语言:javascript
运行
复制
var h = (function(){

    var x = function(){
        alert('hi!');
    }

    var y = function(){
        alert("hi again!");
    }

    this.show = function(){
        alert("This is show function!");
    }

})();

this仍然引用窗口对象--我只能从全局作用域调用show()!怎么会这样?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-05 04:42:03

全局上下文(浏览器中的window)是this在没有其他值可用时获得的值。

您的局部变量是局部变量(即,不是window的属性)。它们是在函数中用var声明的。

添加var h = (function(){...没有区别的原因是调用函数的方式不同。函数引用不是对象(如something.func())的属性值,并且您不能使用.call().apply()调用它,因此这引用了全局(window)对象。这正是语言被定义为行为的方式。

票数 11
EN

Stack Overflow用户

发布于 2011-10-05 05:02:00

@Pointy是正确的,但他并没有呈现整个问题-你可能会对this related answer感兴趣。这里的问题是,如果不使用new关键字,就不会实例化对象,因此this就没有实例可供引用。如果没有实例,this将引用window对象。

通常,在there中不需要this,因为您可以直接访问匿名函数作用域中定义的任何函数或变量- show()可以直接调用x()y(),因此不需要this引用。使用new实例化IIFE可能有一个有效的用例,但我从未遇到过它。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7653757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档