iT邦幫忙

0

JavaScript的一個小測驗

  • 分享至 

  • xImage

在做一些小測驗時碰到這題:

var v=1;
var f1 = function(){
	console.log(v);
}

var f2 = function(){
	var v = 2;
	f1();
}

f2();

想請教各位,為什麼最後的輸出會是1 ?
我不知該怎麼研究這個問題,請各位幫敝人指點個方向,謝謝!

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
海綿寶寶
iT邦大神 1 級 ‧ 2020-11-14 09:57:23
最佳解答

這算「變數範圍(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();
ffaanngg iT邦新手 5 級 ‧ 2020-11-14 16:45:55 檢舉

大概懂了,就是看變數宣告時的scope,謝謝

0
kagaya
iT邦新手 2 級 ‧ 2020-11-16 08:37:11

var v=1;
var f1 = function(){
console.log(v);
}

var f2 = function(){
v = 2;
f1();
}

f2();

這樣應該就會顯示你要的2了

我要發表回答

立即登入回答