錯題本:變數的作用域以及隱式轉換
阿新 • • 發佈:2019-01-09
今天進行了一次週考,其中有兩道不錯的題,第一是記錄一下,第二也是分享一下
第一題:變數的作用域
var x=10;
var y=20;
function f(x){
x=x+10;
y=x;
}
f(x);
console.log(x,y);
首先,這道題打眼一看,這不很簡單嗎,x=20,y=20嗎。可惜,Simple Doesn't Mean Easy。
先看函式f,函式中並沒有return語句,因此這個函式並沒有輸出。再看變數,x,y是全域性變數,但是f函式內的x卻是形參,是區域性變數,它的作用域僅限於函式內部,出了函式就無效了,而且這個函式也沒有輸出,因此,x沒有變化
再看y,y也還是20,哪怕你函式內對y運算了,但是值還是20.這裡的y=x應該是會執行的,只不過是值沒變。
over。這是一個小坑。
第二題隱式轉換
document.write(!5>6);
題再次的很簡單,首先分析一下,這道題輸出的是!5>6的值,大於號是關係運算,返回的應該是true or false。
PS.這裡還牽扯一個小問題,計算順序問題,一般一元計算符是優先於二元計算符的,因此要先算!再算>
再來分析左邊,5是數字型,而!是邏輯運算子,因此應當先把5轉換為布林型,也就是true(我認為0是false,除了0都是true)。
!true=false,所以左邊現在就是就是false。現在算式變為false>6.
我覺得false與6仍舊不能運算,個人認為,關係運算的兩邊應該是相同的資料型別,因此我們再把false轉換為數字型,false就是0,算式最終結果為0>6,返回false
這個坑有點大,也有點繞,全程都是隱式轉換。
end