在做一些小測驗時碰到這題:
var v=1;
var f1 = function(){
console.log(v);
}
var f2 = function(){
var v = 2;
f1();
}
f2();
想請教各位,為什麼最後的輸出會是1 ?
我不知該怎麼研究這個問題,請各位幫敝人指點個方向,謝謝!
這算「變數範圍(scope)」的觀念
所有程式語言都有的共同章節
可以參考這篇
寫得很詳細
#1 裡的 f1 顯示的是第一列的 v
而在 f2 裡定義的 v
對人類眼睛來看是「同一個變數 v」;對程式而言是「不同的兩個變數」(就只是「f2 裡的 v」)
#2 是 #1 的延伸題
也可以在JS fiddle試看看會顯示 1 還是 2
#3 也 #2 是延伸題
也可以在JS fiddle試看看會顯示 1 還是 2
var v=1;
var f1 = function(){
//var v=2; //#3
console.log(v);
}
var f2 = function(){
var v = 2;
f1(); //#1
console.log(v) //#2
}
f2();
var v=1;
var f1 = function(){
console.log(v);
}
var f2 = function(){
v = 2;
f1();
}
f2();
這樣應該就會顯示你要的2了