Javascript 如何在js解释器中使用var或let声明函数
我有两个函数,它们是函数声明Javascript 如何在js解释器中使用var或let声明函数,javascript,function,Javascript,Function,我有两个函数,它们是函数声明 function myFunction(){ console.log("3"); } myFunction(); // prints "7" function myFunction(){ console.log("7"); }; myFunction(); // prints "7" 当我用var关键字生成两个函数表达式时,我发现结果有污点 var myFunction = function(){ console.log("3"); } my
function myFunction(){
console.log("3");
}
myFunction(); // prints "7"
function myFunction(){
console.log("7");
};
myFunction(); // prints "7"
当我用var关键字生成两个函数表达式时,我发现结果有污点
var myFunction = function(){
console.log("3");
}
myFunction(); // prints "3"
var myFunction = function(){
console.log("7");
};
myFunction(); // prints "7"
在我读到的一些关于提升的文章中,有人说js函数声明被提升了,它们将位于代码顶部。js函数使一个对象的名称与函数的名称相同。我发现,如果有两个同名变量make和var关键字,它们会相互覆盖。好的,现在我试试这个
let myFunction = function(){
console.log("Old");
}
myFunction(); //Error:myFunction already declared
let myFunction = function(){
console.log("New");
};
myFunction();
因此,我的问题是,在interputer中运行时存在函数声明,interputer将object作为函数名,它使用var或let创建它。问题实际上不是提升,而是重新声明let值。你不能做的是:
let myFunction = function () {};
let myFunction = function () {}; // Uncaught SyntaxError: Identifier 'myFunction' has already been declared
因此,第四行执行函数时没有错误,但第六行重新定义函数时没有错误。我将尝试解释您提到的三种方法之间的差异 功能关键字 通过function关键字声明函数是挂起的,因此当您声明两个同名函数时,它只返回第二个函数的结果,因为函数声明移动到代码的顶部(在调用之前) 所以你写的代码是
function myFunction(){
console.log("3");
}
myFunction(); // prints "7"
function myFunction(){
console.log("7");
};
myFunction(); // prints "7"
在运行时变成这样:
function myFunction(){
console.log("3");
}
function myFunction(){
console.log("7");
};
//functions declarations become first
myFunction(); // prints "7"
myFunction(); // prints "7"
var关键字
在运行时,使用var
关键字声明的任何变量都会在值未定义的情况下移动到代码的顶部,然后在解释器到达这一行代码时分配给它的值,因此我们在开始时有两个未定义值的变量,我们分配第一个函数并调用它(打印3)然后我们用新值覆盖它并再次调用它(打印7)
let关键字
let是块作用域变量,不能用同一个块声明两次,因此它不起作用“defarent”、“interputer”?我知道interputer如何用var或let关键字调用函数声明。它是用let why in调用的,不能抛出一个错误这两者都可能重复。当我们的函数代码在interputer上运行时,函数是用
function
keyword.no声明的。interputer首先将变量命名为它的名称,比如(var/let=myFunction);我在博客中读到我理解你的var和let部分,但没有函数关键字。我读到js中的function是object。所以我的问题是谁用var或let关键字创建这个对象;我在我的答案中添加了一个示例检查interputer
我假设你的意思是解释器
,具有讽刺意味的是,大多数Javascript引擎并不是真正的解释器
现在,更多的是基于JIT的。无论如何,我能理解英语不是你的母语,而是这个问题是谁用var或let关键字创建了这个对象,这让人非常困惑,我不认为只有我一个人在努力理解你的要求,你能试着重新措辞,我们从那里开始吗。?ps,我在顶部的评论中给出了你的结果不同的原因,你在这一部分有困难吗?@Keith善意地将你的评论添加到原始帖子中,不是在回答中,谢谢,但是MDN如何说函数是一个对象。你的例子说它仍然是函数。