Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.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 - Fatal编程技术网

是否有必要在javascript中使用嵌套函数?

是否有必要在javascript中使用嵌套函数?,javascript,angularjs,Javascript,Angularjs,如果这是一个基本问题,请原谅,但我来自桌面c#背景,这种javascript嵌套函数模式似乎有点难以理解。这与角度无关,更像是一个javascript问题。似乎在成吨的网站/教程中大量使用嵌套函数 HTML 但是,我们可以很容易地分离内部函数,使脚本更易于阅读,就像这样 var sayHelloVariable = function sayhello() { alert("hello world"); }; function MyController($scope) { $sc

如果这是一个基本问题,请原谅,但我来自桌面c#背景,这种javascript嵌套函数模式似乎有点难以理解。这与角度无关,更像是一个javascript问题。似乎在成吨的网站/教程中大量使用嵌套函数

HTML

但是,我们可以很容易地分离内部函数,使脚本更易于阅读,就像这样

var sayHelloVariable = function sayhello() {
    alert("hello world");
};

function MyController($scope) {
    $scope.sayHello = sayHelloVariable;
};
对于这个简单的例子,我们只有几行代码,但我已经看到了一行又一行嵌套函数的教程,这使得我们很难理解到底发生了什么(或者我可能会及时转向javascript的思维方式?)

嵌套函数如此流行有什么特别的原因,也许是性能原因


感谢使用angular,除非您需要重用该函数,否则与该控制器相关的任何函数最好在该控制器内定义,如第一个示例所示。最好不要用大量的随机函数污染父范围。把函数MyConroller($scope)想象成一个类定义,而不是函数定义。

在第二个例子中,
sayHelloVorable
现在污染了父作用域。C#有lambda表达式,也可以用来编写简单的函数,我会在这种情况下使用它们(在你的例子中,如果我在C#中写类似的东西,我也会使用lambda)。因此,情况与C#中的情况相同,我认为这与变量的范围有关,而且JS头喜欢尽可能地最小化我们所能做的一切;)在学习一门新语言时,我强烈建议遵循该语言的实践。他们通常有很好的理由。Javascript没有块作用域,因此@NiettheDarkAbsol指出,您的示例正在泄漏变量。如果您还没有这样做,我强烈建议您继续阅读。这可能会为人们为什么使用嵌套函数提供不同的解释。
function MyController($scope) {
    $scope.sayHello =function sayhello(){
    alert("hello world");
};
var sayHelloVariable = function sayhello() {
    alert("hello world");
};

function MyController($scope) {
    $scope.sayHello = sayHelloVariable;
};