本文目錄一覽:
- 1、js關於作用域的問題
- 2、js 變量作用域問題
- 3、關於JS變量作用域的問題
js關於作用域的問題
首先說一下js全局變量的作用域:
在js中如果直接定義一個變量,都是在window這個作用域下定義的
比如
var num = 60
也可以寫成這樣
window.num = 60
這兩個寫法是完全一樣的,不管哪種寫法,使用 console.log(num, window.num) 都可以打印出來 num的值
相對於題主的這個例子:
函數內部聲明一個局部變量需要 加 var關鍵字,如果沒有 var,根據向上查找原則,就會去方法 f1 上層去查找 num 變量,如果有,直接拿來用,如果沒有就會繼續再向上層查找,如果到了 window域 下還沒找到,這時 就會在 window域 下創建一個 num變量
所以這個例子打印結果是 60
再說這一個例子
f1 中使用 num變量,在方法形參中 已經有一個 num
實際上,在js加載過程中,編譯器在編譯過程中已經在 f1 中對 num變量 進行了聲明,也就是說 num 已經是 f1 作用域下的一個變量了,所以,在函數內再使用 num的時候,就是在使用 f1作用域下的 num變量,而不會再向上層查找
js 變量作用域問題
var changefunc=”xmlHttp.onreadystatechange = “+functionName;
你就沒寫參數過去,自然不會接到,你的AJAX寫的太亂
var functionName=function (classid,id,pagenum)
這裡的參數只是形參,不是實參,所以這些參數沒有全局作用域
你想用到實參,那就把classid,id,pagenum定義成全局變量吧,定義到函數體外面
關於JS變量作用域的問題
v2=80,v3=40
1、這個v2和v3,都是a裏面定義的局部變量:
function a(){
var v2, v3;
2、v2=80,是調用b函數時,b函數直接對b外部的v2進行了賦值,最近的是a函數的v2,所以最終alert的v2是80
3、b函數雖然對v3賦值為80,但是v3是參數里的v3,並不是a函數的v3,對參數v3進行賦值,不會改變a函數的v3,所以alert的v3不變,還是40
另外,樓上的回答雖然有一定道理,但是只是針對同一個人寫同一個項目而言,
實際的工作開發中,引用多個其它人開發的js,甚至其它公司開發的js都是常事,所以出現上面的類似代碼也是可能的,另外,這個例子對於理解js的變量作用域還是有一定意義的
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/278345.html