Javascript 将函数嵌套在彼此之间是一种不好的做法吗?
在嵌套函数中嵌套函数的缺点是什么 下面是一个例子: JS/jQuery:Javascript 将函数嵌套在彼此之间是一种不好的做法吗?,javascript,jquery,function,nested,Javascript,Jquery,Function,Nested,在嵌套函数中嵌套函数的缺点是什么 下面是一个例子: JS/jQuery: function one() { // do something function two() { // do something function three() { // do something function four() { // do something
function one() {
// do something
function two() {
// do something
function three() {
// do something
function four() {
// do something
}
}
}
}
声明嵌套函数的一个
缺点是,每次调用parent
函数时,它都会在函数的环境中创建
function one() {
var a = 1;
two(); // a = 1
}
function two() {
var b = 2;
three(); // b = 2
}
function three() {
var c = 3;
four(); // c = 3
}
function four() {
a = 4;
b = 4;
c = 4;
}
理论上,如果频繁调用parent
函数,这可能会降低性能
但是,嵌套函数在javascript
中非常常用。例如,closures
非常强大,应该为所有javascript开发人员所理解
阅读有关闭包的更多信息,嵌套函数可以访问其父作用域,因此您可以从深度嵌套函数更改父作用域中的状态。比如说
function one() {
var a = 1;
two(); // a = 4
function two() {
var b = 2;
three(); // b = 4
function three() {
var c = 3;
four(); // c = 4
function four() {
a = 4;
b = 4;
c = 4;
}
}
}
}
一方面,这是相当强大的。另一方面,它很容易变得草率和难以推理,因为您必须确保任何子函数都没有更改其任何父函数中的值
如果坚持不嵌套函数,就不必担心函数内部的状态正在从嵌套函数内部更改
function one() {
var a = 1;
two(); // a = 1
}
function two() {
var b = 2;
three(); // b = 2
}
function three() {
var c = 3;
four(); // c = 3
}
function four() {
a = 4;
b = 4;
c = 4;
}
不,这一点都没有错,在js中,这通常是一件好事。如果内部函数依赖于闭包变量,则它们可能不是。如果您不需要闭包或不需要担心污染名称空间,请将其作为同级编写。如果您需要一个闭包或不想污染名称空间,请嵌套它。嵌套与堆栈无关。@SLaks,谢谢您的观点。