国产探花免费观看_亚洲丰满少妇自慰呻吟_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。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 抚顺市| 亳州市| 宣恩县| 密云县| 正蓝旗| 文山县| 会同县| 泸溪县| 开封市| 汝州市| 泸定县| 南康市| 云安县| 镇安县| 江源县| 长武县| 霍山县| 务川| 醴陵市| 繁昌县| 南宫市| 会昌县| 泾源县| 崇左市| 吕梁市| 会同县| 西畴县| 视频| 武鸣县| 克山县| 通山县| 博白县| 东丰县| 朝阳县| 高平市| 永仁县| 东城区| 焉耆| 含山县| 临西县| 正定县|