javascript - js 内层函数如何访问外层函数的变量?
天蓬老师
天蓬老师 2017-04-11 12:57:05
[JavaScript讨论组]

1.问题描述

如标题。

2.代码

function allocateRole(uid,username){
    var url=encodeURI("/userManage/toAllocateRole.do?userid="+uid);
    var dialogId="allocateRoleDialog";
    var dialog_iframe_id = "dialog_iframe_" + dialogId; 
    createDialog("【"+username+"】分配角色", $(window).width()*0.35, $(window).height()*0.46, url, "allocateRoleDialog");
    
    //覆盖按钮
    $("#"+dialogId).dialog({
        buttons : [ {
            id : 'saveButton',
            text : '保存',
            iconCls : 'icon-ok',
            width : 90,
            handler : function(){
                window.frames[dialog_iframe_id].contentWindow.saveUserRole(); //注:要在这个匿名函数里,访问外层函数的局部变量dialog_iframe_id,有什么办法?
            }
        }, {
            id : 'resetButton',
            text : '重置',
            iconCls : 'icon-redo',
            width : 90,
            handler : function(){
                var fra=window.frames[dialog_iframe_id].contentWindow;

                var nodeList=fra.$('#roleTree').tree('getChecked');
                $(nodeList).each(function(i){
                    fra.$('#roleTree').tree('uncheck',nodeList[i].target);
                });
            }
        } , {
            id : 'closeButton',
            text : '关闭',
            iconCls : 'icon-cancel',
            width : 90,
            handler : function(){
                closeDialog(dialogId);
            }
        } ]
    });
    
}
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(4)
怪我咯

问题描述不清楚,不知道你具体要什么样的功能。好好看看作用域链吧,如果作用域内部已经定义了某个属性,那么就不会向外层作用域查找了

PHP中文网

从当前函数作用域往外层找,直到window.. 内层不是直接可以调用外层的变量嘛?还要怎么调用啊?

PHP中文网

这样~

handler : function(dlg_id){
                window.frames[dlg_id].contentWindow.saveUserRole(); 
}
//调用时                
handler(dialog_iframe_id);

x=0
0
window.x
0
function fn3(){
   var a=0;
   console.log(window.x={
       h:function(){a=a+1;console.log(a)}
   });
   
}
undefined
fn3()
Object {h: function}
undefined
x
Object {h: function}
x.h()
1
undefined
x.h()
2
undefined
x.h()
3
undefined

上面是在chrome的console 里写的简单例子。
fn3 和 你的 allocateRole函数,结构大致相同。
这其实是个闭包,变量dialog_iframe_idallocateRole函数执行之后,它的值就固定handler的闭包里了。

ringa_lee

作用域问题,内层找不到就找外层

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号