let和const与javascript'this'关键字的行为

时间:2018-12-04 16:21:47

标签: javascript this

var num = 8;

const wantToKnowThis = function(val) {
  var num = 6;
  return this.num
}
console.log(wantToKnowThis(3));

如果我运行此代码,答案将是8,这是正确的,但是如果仅替换let或const来运行此代码,它将给出未定义的结果!

let num = 8;

const wantToKnowThis = function(val) {
  var num = 6;
  return this.num
}
console.log(wantToKnowThis(3));

让此关键字与const的行为相比,与var有所不同,请让我知道吗?

1 个答案:

答案 0 :(得分:2)

如果在全局范围内使用var,则它将在window对象上隐式创建一个具有相同名称的属性。

constlet并非如此。


这实际上与this没有任何关系,只不过删除了几个步骤。

如果您使用this是没有上下文的函数(即,它不是对象上的方法,并且没有通过bind=>获得绑定上下文),则this将是window(除非您使用"use strict",并且应始终使用"use strict",因为它可以防止各种陷阱)


如果您想访问函数外部的变量,则不要求助于全局变量。只需首先不要为本地变量赋予相同的名称

let num = 8;

const wantToKnowThis = function(val) {
  let local_num = 6;
  return num;
}

console.log(wantToKnowThis(3));