Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 意外的行为。自执行函数调用作用域函数_Javascript_Angularjs_Angularjs Scope - Fatal编程技术网

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(){})()