Javascript建構函式中變數的範圍問題,javascript建構函式
建構函式可以與new一起使用,代表建立對象;也能夠當做普通的函數調用,因為它也是一個函數。
function Person(name) {this.name=name;}Person(12);alert(window.name);//12
可以看到當建構函式被當成普通函數調用的時候,this代表的是全域的window對象。很顯然把建構函式當成普通函數調用,不是好的做法, 也沒有什麼道理要這麼做。實際中應該杜絕這樣奇怪的用法,以免產生奇怪的問題。
function Person(name,sex) { this.name=name; var name1="22"; name2=sex;}var per = new Person("aty","boy");alert(per.name);// atyalert(per.name1);//undefinedalert(per.name2);//undefinedalert(window.name2);//boy
建構函式中定義變數使用this是成員變數;使用var是局部變數;不加關鍵字是全域變數,會添加到window對象中。這樣解釋了為什麼建構函式中要使用this關鍵字。
JavaScript變數範圍的問題
功能不會做,
但是,你這段代碼不是範圍問題,
你把var targetImage = document.getElementById('floatingImg');
這句話放到 floating方法 外邊,也就是頁面一載入開始就執行,這個時候id="'floatingImg'"的元素還沒有載入(連<body>元素都沒有),當然是空。
把這段代碼放到 window.onload = function(){}; 中
一個Javascript變數範圍
因為你第二個例子裡面在調用test()之前那句“document.write("<LI>" + langVBS); ”發生了錯誤("langVBS未定義"),所以並沒有調用到test()函數,只執行了“document.write("<LI>" + langJS); ”一句。
第一個例子其實也有這個錯誤,但是在調用test()之後才發生的錯誤,所以不影響text()函數的執行。