gpt4 book ai didi

javascript - 使用 let 初始化的函数在使用 this 访问时不会被替换

转载 作者:行者123 更新时间:2023-12-03 08:06:09 24 4
gpt4 key购买 nike

为什么用let初始化的函数在使用this访问时没有被替换?

我有这个脚本:

"use strict"
var testfunction1 = function() {
console.log(false)
}
this.testfunction1 = function() {
console.log(true)
}
console.log(testfunction1.toString())
console.log(this.testfunction1.toString())

function testfunction2() {
console.log(false)
}
this.testfunction2 = function() {
console.log(true)
}
console.log(testfunction2.toString())
console.log(this.testfunction2.toString())

let testfunction3 = function() {
console.log(false)
}
this.testfunction3 = function() {
console.log(true)
}
console.log(testfunction3.toString())
console.log(this.testfunction3.toString())

它产生以下输出:

function() {
console.log(true)
}
function() {
console.log(true)
}
function() {
console.log(true)
}
function() {
console.log(true)
}
function() {
console.log(false)
}
function() {
console.log(true)
}

最佳答案

据我所知,似乎:

The let statement declares a block scope local variable, optionally initializing it to a value. - MDN:let

对于全局函数声明:

Global function declarations are always represented as own properties of the global object. - ES6:see note at bottom of section

这表明 let 仅创建一个本地范围的变量,而其他变量则在 window 对象(全局对象)下创建它。

因此,标准声明会被 this 前缀的声明覆盖,而基于 let 的声明则位于本地范围内,并用于覆盖当前上下文中声明的声明.

关于javascript - 使用 let 初始化的函数在使用 this 访问时不会被替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34377920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com