JavaScript中两个相似代码块的不同行为

时间:2018-06-27 13:24:08

标签: javascript

// Block - 1
var moduleToBind = {
  name: 42,
  getName: function() {
    return this.name;
  }
}

var unboundGetName = moduleToBind.getName;
console.log(unboundGetName());

var boundGetName = unboundGetName.bind(moduleToBind);
console.log(boundGetName());
// End Block -1
// Output :
//
// 42

// Block - 2 having similar code
var module = {
  x: 42,
  getX: function() {
    return this.x;
  }
}

var unboundGetX = module.getX;
console.log(unboundGetX());

var boundGetX = unboundGetX.bind(module);
console.log(boundGetX());
// End Block - 2
// Output :
// undefined
// 42

我检查了Chrome版本67.0.3396.87(正式版本)(64位)和Firefox版本60.0.2(64位)中的JavaScript代码。

尽管在节点中,两个块的未定义结果相同,均为42。

1 个答案:

答案 0 :(得分:1)

因此,您的问题是此上下文和变量名称的选择。

因此,运行代码时,thiswindow,并且窗口具有name property,但是它没有x属性。

所以this.name === window.name

如果在代码之前在窗口对象(例如window.x = "foo")上定义属性x,则会得到与this.name相同的结果类型。