我有两个函数名为init
一个使用函数声明声明,另一个使用函数表达式声明,如下所示:
function init() {
alert ('init 1');
}
var init = function(){
alert('init 2');
}
init();当我调用init函数时,它会通知init 2。
Demo
我的问题是:
1-为什么javascript没有抛出错误,因为两个函数都有相同的名称。
2-如何调用第一个函数?
发布于 2014-10-10 11:58:09
为什么javascript没有抛出错误,因为两个函数都有相同的名称。
他们的名字不一样。第二个是包含匿名函数的变量init。第一个是一个名为init的函数。
您可以通过在这两种情况下执行以下操作来测试这一点:
console.log(init.name);您将看到,第一个确实有一个名称init,而第二个没有名称。
如何调用第一个函数?
在这个例子中,第一个不能在第二个变量使用init之后调用。除非您有第一个引用,如:
function init() {
alert ('init 1');
}
var original = init;发布于 2014-10-10 12:01:23
在你所做的事情和
var i = 1;
var i = 2;不,JS不会抛出错误,而且不,一旦您重新定义了i,您就无法获得旧的值。
在ES6和一些现代浏览器中,您可以说
const i = 1;然后引擎会抱怨如果它被重新定义了。
发布于 2014-10-10 12:01:58
JavaScript中的声明是悬挂的。函数声明是一种声明类型。因此,您的程序相当于:
var init = function init() {
alert("init 1");
};
var init = function () {
alert("init 2");
};
init();
如果您在第二个定义之前调用init,那么它会提醒init 1
function init() {
alert("init 1");
}
init();
var init = function () {
alert("init 2");
};
由于提升,您甚至可以在init出现在程序中之前调用它:
init();
function init() {
alert("init 1");
}
var init = function () {
alert("init 2");
};
请记住,无论它们在程序中的出现顺序如何,函数声明总是放在第一位:
init();
var init = function () {
alert("init 2");
};
function init() {
alert("init 1");
}
希望这能有所帮助。
https://stackoverflow.com/questions/26298835
复制相似问题