關於JS變數作用域的問題,js關於作用域的問題

時間 2021-08-30 09:08:44

1樓:匿名使用者

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的變數作用域還是有一定意義的

2樓:匿名使用者

一個邏輯混亂不符規範的js指令碼,實在無討論的必要。

我不奢望你採納,也不想要你那點毫無意義的分值,也不想在這裡長篇大論幫你解釋這個問題。

不知道你為什麼要在函式內部定義和全域性變數相同的變數名?????這可是大忌,同時也很沒必要。

不過有一點是肯定的:不要在函式內部定義和全域性變數一樣的變數名,未經定義的變數不要使用。要不有故弄玄虛之嫌。

你既然知道周圍有一個叫張三的人,為什麼還要把你的孩子取名叫張三?這不是沒事找抽型的嘛。這種問題完全沒有花時間討論和解決的必要。

程式的宗旨不是高深莫測沒事找事,而是幫助人們解決問題,把複雜的問題簡單化,幫助人們減輕工作和生活負擔。

js關於作用域的問題

3樓:dream_kiss伱

首先bai說一下js全域性變數的作用域:

du在js中如zhi果直接定義一個dao變數,都是專在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物件問題

window 物件表示瀏覽器中開啟的視窗。如果文件包含框架 frame 或 iframe 標籤 瀏覽器會為 html 文件建立一個 window 物件,併為每個框架建立一個額外的 window 物件。註釋 沒有應用於 window 物件的公開標準,不過所有瀏覽器都支援該物件。不過你可以理解為 win...

JS閉包問題求解,js閉包的問題。

getnamefunc是物件object的內部方法,所有this object 你怎麼可以用object做變數的?第二個方法 getnamefunc 返回了一個函式 你並沒有繫結上下文,就放到window這個物件中了,號稱全域性變數 如果這樣 var o o.fun objectx.getnamef...

js動態獲取id的問題,js獲取div的id值的問題

千鋒教育 html規則要求id名稱不能相同,會衝突的。如果你要選擇多個物件要用tag或者class。不要使用id屬性。常用的dom方法有 getelementsbyclassnamegetelementsbytagname getelementsbyclassname有時候會失靈,所以,getele...