我正在阅读功能声明与功能表达式, B.9 下的 javascript : The Good Parts
一书。有一条线说
函数语句需要提升。这意味着 无论函数放在何处,它都会移动到顶部 它的定义范围。这放宽了要求 函数应该在使用之前声明,我认为这会导致 草率
所以根据这个,我做了一个简单的实验如下:
<html>
<script type="text/javascript">
var x = function(){
alert(s);
var s = function(){
return 'sanmevg';
}
};
</script>
<body>
<button onclick="x();">click here</button>
</body></html>
现在根据这本书,它明确指出:
它被移到了顶部 它的定义范围。这放宽了要求 函数应在使用前声明
所以这意味着当点击该按钮时,应该有一个alert
说sanmveg
。但结果出乎意料,它返回Undefined
。
1)我应该接受Douglas Crockford
写的那些陈述,纠正一些特殊情况(如果是,那么它会非常友好地告诉我那些情况)?
2)它是否反映了其他一些含义?
3)我在实验中做错了什么?
感谢您的所有答案!
答案 0 :(得分:0)
因为那不是函数声明:
var s = function(){
return 'sanmevg';
}
它是一个分配给变量的匿名函数。将其改为,它将起作用:
function s(){
return 'sanmevg';
}
如Phylax所述:
&#34;请注意
var s
将被悬挂。这就是alert()
显示undefined
而不是错误的原因。但是分配的将保持原样。&#34;
答案 1 :(得分:0)
您键入的是函数表达式而不是函数声明。
函数声明被提升,这就是为什么你可以调用上面定义它的函数以及你正在阅读的内容。
function myFunction(){
alert('myFunction');
}
但是,函数表达式是您键入的内容。声明的变量被提升,但功能分配仍然存在。
var myFunction = function(){
alert('myFunction');
}