JS中如何在嵌套函数内访问父级函数的this及内部变量
类方法内部嵌套函数访问外层变量实现方案
核心逻辑是利用编程语言的嵌套函数作用域链特性:外层函数的变量会被保存在作用域链中,内部定义的嵌套函数可以直接访问外层作用域的所有变量,不需要额外传递参数。
以下是主流编程语言的实现示例:
Python 实现
Python中嵌套函数默认可以读取外层函数变量,如需修改外层非全局变量,需要添加nonlocal关键字声明。
基础访问示例
class DemoClass: def func_a(self, input_param): # 函数A的内部变量 inner_var = "函数A的内置变量" # 内部定义函数B def func_b(): # 直接访问函数A的入参与内部变量 print(f"读取函数A的入参:{input_param}") print(f"读取函数A的内部变量:{inner_var}") # 调用函数B测试 func_b() # 运行测试 demo = DemoClass() demo.func_a("传入函数A的参数")
修改外层变量示例
如果需要在func_b中修改func_a的普通变量,需要添加nonlocal声明:
class DemoClass: def func_a(self): count = 0 def func_b(): nonlocal count count += 1 print(f"函数B中修改后的count值:{count}") func_b() print(f"函数A中同步更新的count值:{count}")
JavaScript 实现
JS中无论用普通函数还是箭头函数定义内部函数,都可以通过作用域链直接访问、修改外层函数的变量:
class DemoClass { funcA(inputParam) { const innerVar = "函数A的内置变量" // 内部定义函数B const funcB = () => { console.log("读取函数A的入参:", inputParam) console.log("读取函数A的内部变量:", innerVar) } // 调用测试 funcB() } } // 运行测试 const demo = new DemoClass() demo.funcA("传入函数A的参数")
内容的提问来源于stack exchange,提问作者idkplshelpme
相关产品推荐
相关产品推荐

