1. 程式人生 > >錯題本:變數的作用域以及隱式轉換

錯題本:變數的作用域以及隱式轉換

今天進行了一次週考,其中有兩道不錯的題,第一是記錄一下,第二也是分享一下

第一題:變數的作用域

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