gpt4 book ai didi

javascript - 为什么我的 JavaScript 函数名称会冲突?

转载 作者:IT王子 更新时间:2023-10-29 02:42:39 25 4
gpt4 key购买 nike

我写了下面的脚本只是为了看看当变量和分配给它的函数的函数名称冲突时会发生什么:

var f = function() {
console.log("Me original.");
}

function f() {
console.log("Me duplicate.");
}

f();

我得到的输出是“Me original”。为什么另一个函数没有被调用?

此外,如果我将原始赋值更改为 var f = new function() {,我会得到“Me original”,然后是一个 TypeError 说 object is not a function。有人可以解释一下吗?

最佳答案

函数声明在 JavaScript 中被提升(移动到顶部)。虽然在解析顺序方面不正确,但您拥有的代码在语义上与以下代码相同,因为函数声明已提升:

function f() {
console.log("Me duplicate.");
}
var f = function() {
console.log("Me original.");
}


f();

这反过来,除了函数的名称是相同的:

var f = function() {
console.log("Me duplicate.");
}
var f = function() {
console.log("Me original.");
}


f();

反过来,因为变量提升是一样的:

var f;
f = function() {
console.log("Me duplicate.");
}
f = function() {
console.log("Me original.");
}

f();

这解释了您得到的结果,您正在重写该函数。更一般地,多个 var 声明在 JavaScript 中是允许的 - var x = 3; var x = 5 是完全合法的。在新的 ECMAScript 6 标准中,let 语句禁止这样做。

This article @kangax 在揭开 javascript 函数的神秘面纱方面做得非常出色

关于javascript - 为什么我的 JavaScript 函数名称会冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23889317/

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