我试图更好地了解this
的使用。在尝试这段代码时,我发现可以使用类似arr
的东西来访问console.log(this.arr[4])
中的项目,但前提是必须使用arr
声明var
。如果我使用arr
或let
声明const
,则会收到TypeError。
首先,我知道这很冗长。就像我说的那样,我只是在尝试以寻求更好的理解,并发现了这个引起我好奇的问题。
const arr = [
1,
false,
{
name: 'John',
address: '123 Peachtree Drive'
},
function(name = 'new user') {
const greeting = 'Hello there, '
console.log(greeting + name)
},
'foo',
]
console.log(this.arr[4])
同样,如果我只是使用arr
而不是var
来声明let
,那么我可以很好地记录它。
答案 0 :(得分:4)
在浏览器中,顶级this
是window
,顶级var
声明还使变量可以作为window
的属性访问,而{{1} }和let
没有。引用const
的正确方法很简单
arr
我不鼓励您使用顶级console.log(arr[4])
甚至访问this
声明,因为依赖于var
的行为的代码显然令人困惑,因为这种情况很完美的例子。
答案 1 :(得分:0)
让您感到困惑的行为并不特定于“ this”。它与范围有关。 “ var”的作用域与“ let”或“ const”的作用域不同。
var - has function level scoping and can change the value reference
let - has block level scoping and can change the value reference
const - has block level scoping but cannot change the value reference
https://love2dev.com/blog/javaScript-var-let-const/
请准确声明变量的方式和位置,因为这是JavaScript语法/解释的重要组成部分。