function mymethod(){
alert("global mymethod");
}
function mysecondmethod(){
alert("global mysecondmethod");
}
function hoisting(){
alert(typeof mymethod);
alert(typeof mysecondmethod);
mymethod(); // local mymethod
mysecondmethod(); // TypeError: undefined is not a function
// mymethod AND the implementation get hoisted
function mymethod(){
alert("local mymethod");
}
// Only the variable mysecondmethod get's hoisted
var mysecondmethod = function() {
alert("local mysecondmethod");
};
}
hoisting();
我无法理解在这种情况下吊装是如何工作的以及为什么alert("local mysecondmethod");
没有显示。如果有人能告诉我这个序列会有所帮助
答案 0 :(得分:2)
在hoisting
函数中,代码按如下方式重新排序:
function hoisting(){
var mysecondmethod;
function mymethod(){
alert("local mymethod");
}
alert(typeof mymethod);
alert(typeof mysecondmethod);
mymethod();
mysecondmethod();
mysecondmethod = function() {
alert("local mysecondmethod");
};
}
很明显,您在函数范围内创建了一个新变量mysecondmethod
,它覆盖了您的外部定义。
然而,在函数调用时,它尚未定义(尚未),因此您会收到错误。
答案 1 :(得分:1)
理解提升的最简单方法是获取所有var语句并将它们移动到包含它们的函数的顶部:
function hoisting(){
var mysecondmethod; // locally undefined for now
alert(typeof mymethod);
alert(typeof mysecondmethod);
mymethod(); // local mymethod
mysecondmethod(); // TypeError: undefined is not a function
// mymethod AND the implementation get hoisted
function mymethod(){
alert("local mymethod");
}
// Only the variable mysecondmethod get's hoisted
mysecondmethod = function() {
alert("local mysecondmethod");
};
}
hoisting();