国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

關于javascript 回調函數中變量作用域的討論

2024-05-06 14:14:08
字體:
來源:轉載
供稿:網友
1、背景
Javascript中的回調函數,相信大家都不陌生,最明顯的例子是做Ajax請求時,提供的回調函數,
實際上DOM節點的事件處理方法(onclick,ondblclick等)也是回調函數。
在使用DWR的時候,回調函數可以作為第一個或者最后一個參數出現,如:
JScript code function callBack(result){ } myDwrService.doSomething(param1,param2,callBack);//DWR的推薦方式 //或者 myDwrService.doSomething(callBack,param1,param2);

2、問題描述
最近在使用Dojo+Dwr的時候,碰到一個問題:
如果回調函數是屬于某個對象(記為obj1)的方法,等到DWR執行該回調函數的時候,
上下文卻不是obj1。
表現的現象就是在回調函數中訪問obj1的任何屬性都是undefined。
版本:Dojo1.3.1和dwr2
3、模擬問題的代碼
下面的測試代碼可以模擬這個問題:
JScript code
代碼如下:
<html>
<head>
<script type="text/javascript"><!--
    var context="全局";
    var testObj={
        context:"初始",
        callback:function (str){
            //回調函數
            alert("callback:我所處的上下文中,context="+this.context+",我被回調的方式:"+str);
        }
    };
    //創建一個對象,作為測試回調函數的上下文
    testObj.context="已設置";
    function testCall(){
        callMethod(testObj.callback);
        callObjMethod(testObj,testObj.callback);
    }
    function callMethod(method){
        method("通過默認上下文回調");
    }
    function callObjMethod(obj,method){
        method.call(obj,"指定顯式對象上下文回調");
    }
// --></script>
</head>
<body> <a href="javascript:void(0)" onclick="testCall()">調用測試</a> </body>
</html>

在callObjMethod方法中,我用了兩種方式回調“method"方法:
第一種方式:method("通過默認上下文回調");
沒有指定上下文,我們發現回調函數內部訪問context的值是全局變量的值,
這說明,執行該方法的默認上下文是全局上下文。
第二種方式:method.call(obj,"指定顯式對象上下文回調");
指定obj為method執行的上下文,就能夠訪問到對象內部的context。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 政和县| 黎川县| 江口县| 商南县| 望城县| 灌云县| 肃宁县| 马尔康县| 昌乐县| 云浮市| 绥阳县| 珠海市| 贵定县| 札达县| 綦江县| 黄冈市| 昌图县| 柞水县| 合肥市| 仁寿县| 花莲县| 乐安县| 美姑县| 图木舒克市| 盱眙县| 舒城县| 东安县| 新化县| 武安市| 平湖市| 宁波市| 普洱| 东阳市| 永安市| 友谊县| 青川县| 织金县| 六枝特区| 马公市| 阳曲县| 阳曲县|