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