程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> javascript-JavaScript找不到已經定義的函數

javascript-JavaScript找不到已經定義的函數

編輯:編程綜合問答
JavaScript找不到已經定義的函數
 ready: function() {
        setup();
        function setup() {
            for(i=0;i<s.length-1;i++)  {
                var j = i+1;
                document.getElementById(s[i]).onchange = new Function("change("+ j +")");//這裡有個change,但是這個change為什麼提示說找不到
            }
            change(0);//而這個change可以正常使用
        }
        function change(v) {
           //裡面的代碼是次要的,為什麼s[i]內容改變觸發onchange後找不到定義好的change呢?
        }
    },

錯誤提示:Uncaught ReferenceError: change is not defined
請問老師改如何修改能讓onchange觸發後找到change函數,謝謝。

最佳回答:


為什麼?
我看你沒用庫,你應該了解點原生的js,有個很重要的概念叫執行環境:一個函數進入到執行環境中會初始化一些東西,包括this和arguments。注意
這個初始化,它依賴的是函數的執行環境,可以聯系call和apply來理解。那麼問題來了,你給onchange綁定一個函數,這個函數到element-change的
時候才會執行,它執行的時候你上面這段代碼早已經不在運行環境中了,這個change的函數要到哪裡去找?
解決辦法:
1.全局環境不會被銷毀,用window.change = change將函數掛在全局上。
2.用一個匿名函數包裝:

 document.getElementById(s[i]).onchange = function(){ change("+ j +") };
deyuzhi
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved