Javascript 意外的行为。自执行函数调用作用域函数
琐碎的标记:Javascript 意外的行为。自执行函数调用作用域函数,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,琐碎的标记: <!DOCTYPE html> <html ng-app="APP"> <head></head> <body ng-controller="myController"> <script src="angular.min.js"></script> <script src="controller.js"></script> </body> <
<!DOCTYPE html>
<html ng-app="APP">
<head></head>
<body ng-controller="myController">
<script src="angular.min.js"></script>
<script src="controller.js"></script>
</body>
</html>
还有非常奇怪的行为。您能解释一下为什么会发生这种情况吗?您无意中进行了
测试范围方法IIFE,而当前代码基本上是
$scope.test = (function() {
console.log('Weird behaviour!')
})(undefined)
而$scope.test
本身将未定义
应该是
$scope.test = function() {
console.log('Weird behaviour!')
};
(function() {} ());
分号很珍贵。当您在$scope.test
函数之后添加代码write时,它有()
。因此,它是测试
功能被认为是自我
执行功能
正如@estus已经说过的,您可以通过结束函数代码来避免这个问题代码>
代码
$scope.test = function() {
console.log('Weird behaviour!')
}(function() {} ())
反对分号的人的其他答案:
$scope.test = function() {
console.log('Weird behaviour!')
}
!function(){}();
通常的规则是,在编写无分号的样式时,要避开startine[
/(
):
;[].forEach.apply(arguments, iterator)
;(function(){})()
埃斯特斯解释得很好,谢谢+1@PankajParkar,谢谢,答案几乎是同时出现的。但是你的比我的好;)我相信你知道这种特定于javascript的代码风格…这里有一个例子:jsfiddle.net/prfy9eso。有趣的是,对这个例子的解释以不同的方式工作(在第二个示例中,空行会改变代码行为,但在角度示例中不会改变行为)。“return”。请注意“return语句后无法访问代码”的注释,它只涉及Firefox,但使用正确配置的linter可能会防止这两种情况。另外,抛出
,继续
,中断
。
;[].forEach.apply(arguments, iterator)
;(function(){})()