如何从外部脚本调用嵌套在test函数内的makemouvement函数?
问题分析
你遇到的核心问题是作用域限制:makemouvement 是嵌套在 test 函数内部的局部函数,只能在 test 的作用域内被访问,全局作用域(第一个 <script>)无法直接调用它。
解决方案
下面提供两种实用的解决方式,根据你的需求选择:
方式1:让 test 返回内部函数,通过调用 test 获取方法
修改第二个 <script> 中的代码,让 test 函数返回包含 makemouvement 的对象:
function test(){ function subtest1(){ //... }; function subtest2(){ //... }; function makemouvement(mouvement){ alert(mouvement); //... }; // 返回内部函数,暴露到外部作用域 return { makemouvement: makemouvement }; }
然后在第一个 <script> 中这样调用:
var mouvement = 1; // 执行test拿到返回对象,再调用内部方法 test().makemouvement(mouvement);
方式2:将 makemouvement 挂载到全局对象(window)
如果希望直接用 makemouvement() 调用,可以在 test 内部把函数挂载到全局:
function test(){ function subtest1(){ //... }; function subtest2(){ //... }; function makemouvement(mouvement){ alert(mouvement); //... }; // 把函数挂载到全局window对象 window.makemouvement = makemouvement; } // 先执行test,完成全局挂载 test();
第一个 <script> 中直接调用:
var mouvement = 1; makemouvement(mouvement);
关键原理
JavaScript 遵循函数作用域规则:函数内部定义的变量/函数,只能在该函数内部(或嵌套的更内层函数)访问。要让外部作用域访问,必须主动把局部函数暴露到外部(比如通过返回值、挂载全局对象)。
内容的提问来源于stack exchange,提问作者al78310
相关产品推荐
相关产品推荐

