javascript - 为什么代码示例中 `this`没有指向js全局作用域

标签 javascript this

为什么下面代码中的this没有指向js全局作用域?

<html>
<head></head>
<body>
<script type="text/javascript">

var valueHolder = {
    value: '',
    setValue: function(newValue) {
        this.value = newValue;
    },
    getValue: function() {
        return this.value;
    }
}

valueHolder.setValue("hello world");

alert(valueHolder.getValue()); // return "hello world"
alert(valueHolder.value);      // return "hello world"
alert(window.value);           // return "undefined"

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

最佳答案

取决于对函数的引用(参见 the spec 的 11.2.3):

var valueHolder = {
    value: '',
    setValue: function(newValue) {
        this.value = newValue;
    },
    getValue: function() {
        return this.value;
    }
}

var set = valueHolder.setValue,
    get = valueHolder.getValue;

set('test');

alert(get());                  // return "test"
alert(valueHolder.value);      // return ""
alert(window.value);           // return "test"

在上下文中引用时,this 设置为相关上下文(示例中的valueHolder)。在上面的示例中,函数定义显然是相同的,但函数引用不在任何对象的上下文中,在这种情况下 this 设置为全局上下文 (window).

关于javascript - 为什么代码示例中 `this`没有指向js全局作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8656774/

相关文章:

javascript - Google Visualization API - 将颜色设置为特定点

javascript - 使用在 jQuery.on( 调用中对 'this' 进行操作的函数

php - php中$this::和$this->的区别

javascript - 从 jQuery 函数引用 Javascript "Class"方法

javascript - 我如何更改显示的 jQuery 数据表默认行数

javascript - 从嵌套数组创建 UL

javascript - 为 forEach 方法中的数组项赋予值 'this' (javascript)

javascript - react - 类型错误 : Cannot read property 'props' of undefined

javascript - 如何将 Crashlytics 与 React Native 应用程序集成

javascript - 单击页面中的任意位置关闭子菜单下拉菜单