函数如何在定义它的作用域的顶部移动
how can a function move at the top of the scope in which it is defined
我正在阅读这本书 javascript : The Good Parts
,在函数语句与函数表达式下,第 B.9 节。有一句话说
功能语句需要吊装。这意味着 无论函数放置在何处,它都会移动到 定义它的范围。这放宽了以下要求: 函数应该在使用前声明,我认为这会导致 马虎
因此,根据这一点,我做了一个简单的实验,如下所示:
<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(我在实验中做错了什么吗?
谢谢你的所有回答!
因为这不是函数声明:
var s = function(){
return 'sanmevg';
}
它是分配给变量的匿名函数。将其更改为该,它将起作用:
function s(){
return 'sanmevg';
}
正如菲拉克斯所说:
"请注意,
var s
将被吊起。这就是为什么alert()
显示undefined
而不是错误的原因。但被分配的人将留在原地。
您键入的是函数表达式,而不是函数声明。
函数声明被提升,这就是为什么您可以在定义它的位置和您正在阅读的内容中调用上面的函数。
function myFunction(){
alert('myFunction');
}
但是,函数表达式是您键入的内容。声明的变量被提升,但函数赋值仍然存在。
var myFunction = function(){
alert('myFunction');
}
相关文章:
- 监视函数从服务返回不起作用,但作用域函数起作用
- 将作用域存储在JSON中
- 从控制器继承了隔离的作用域以生成可重用的指令
- 从ng模板访问作用域
- 调用私有作用域
- 对父作用域的指令更新延迟了一步
- 正在$rootScope上达到控制器作用域$在内部控制器上
- 两个指令创建新的继承的和隔离的作用域-元素得到哪个
- 这两个关于 JavaScript 作用域链的例子有什么区别?
- 在具有命名作用域的自定义Polymer元素中隐藏表行
- AngularJS指令隔离作用域
- Angularjs:修改js中的作用域,稍后在页面中使用
- 访问多个指令的隔离作用域
- Javascript作用域和Ajax调用;工作不正常
- 向Angular作用域对象添加对象数组——TypeError
- ng重复中的ng模型-初始化唯一作用域属性
- 在put方法之前从作用域获取数据
- 如何在html中以角度显示自定义指令的作用域
- 当提供函数名称时,检查函数是否存在于同一作用域中
- 函数如何在定义它的作用域的顶部移动