摘要:看了幾道變量提升的小題想分享給大家,都很簡單,我這里就不解釋原因了。因為被轉換為的問題調用的只不過是轉換的前后順序不同
看了幾道變量提升的小題想分享給大家,都很簡單,我這里就不解釋原因了。
我們先說一下預編譯的過程
創建AO對象
找形參和變量聲明,放入AO中,值為undefined
形參實參相統一
找函數聲明,給AO中相應的的對象賦函數體
下面我們來看幾個題:
1.
console.log(bar());//11 打印的是函數的返回值 function bar(){ foo = 100; function foo(){} var foo = 11; return foo; } 1. AO { } 2. AO { foo: undefined //變量聲明 } 3. AO { foo: undefined //無形參 } 4. AO { foo: function foo(){} }
2.
function bar(){ return foo; foo = 100; function foo(){} var foo = 11; } console.log(bar());//fun 1. AO { } 2. AO { foo: undefined //變量聲明 } 3. AO { foo: undefined //無形參 } 4. AO { foo: function foo(){} }
3.
function test(){ console.log(b);//unde if(a){ var b = 100; } c = 234; console.log(c);//234 } var a; test(); a = 10; console.log(c);//234 console.log(global);//unde global = 100; console.log(global);//100 function fn(){ console.log(global);//unde global = 200; console.log(global);//200 var global = 300; console.log(global) //300 } fn(); var global; console.log(test);//fun
4.
function test(test){ console.log(test);//fun var test = 234; console.log(test);//234 function test(){} } test(1); var test = 123; console.log(test);//123
5.
function test(a,b){ console.log(a);//fun console.log(b);//unde var b = 234; console.log(b);//234 a = 123; console.log(a);//123 function a(){} var a; b = 28; var b = function(){} console.log(a);//123 console.log(b);//fn } test(1);
6.
function test(a,b){ console.log(a);//1 c = 0; var c; a = 3; b = 2; console.log(b);//2 function b(){} function d(){} console.log(b);//2 } test(1);
7.
function fn(a){ console.log(a);//fun var a = 123; console.log(a);//123 function a(){} console.log(a);//123 var b = function(){} console.log(b);//fun function d(){}; } fn(1);
8.
console.log(a);//fun a();//fun var a = 3; function a(){ console.log(a); } console.log(a);//3 a = 6; a();//error a 不是一個函數 a = 6
9.
a(3); var a = 1; function a(a) { console.log(a); //3 console.log(b); //fun b = 1; c = 2; console.log(b); //1 var b = 5; console.log(d); //fun function b(){}; var a = 6; console.log(c); // 2 if(false){ var d = 1; c = 5; } console.log(c); //2 function d(){}; console.log(d); //fun arguments[0] = 7; console.log(a); //7 } console.log(a); // 1 console.log(c); // 2
10.
function Foo(){ getName = function(){ alert(1); }; return this; } Foo.getName = function(){alert(2);}; Foo.prototype.getName = function(){alert(3);}; var getName = function(){alert(4);}; function getName(){alert(5);}; Foo.getName();//2 getName();//4 Foo().getName();//1 new Foo.getName();//2 new Foo().getName();//3 new new Foo().getName();//3
其實上面一道題有關于變量提升但是不是重點因為還有原型、繼承、運算符優先級等知識點。
閑扯
parseInt
console.log(parseInt("a", 16)); //10 console.log(parseInt(function(){}, 16)); //15 "f" console.log(parseInt(parseInt, 16)); //15 "f" console.log(parseInt(0.000002)); //0 console.log(parseInt(0.0000002)); //2 "2e-7" 大于等于7位才會用科學計數法表示 console.log(parseInt(false, 16)); //250 "fa" console.log(parseInt("113", 2)); //3 "11"
立即執行函數的寫法
(function a() { console.log(1); })(); (function a() { console.log(1); }()); +function a() { console.log(1); }(); -function a() { console.log(1); }(); !function a() { console.log(1); }(); false || function a() { console.log(1); }(); true && function a() { console.log(1); }(); var a = function a() { console.log(1); }();
上面的代碼都相當于是立即執行函數,其實主要是你把它變成一個表達式它就能立即執行。也就是**只有表達式才能被執行符號執行**。 + 兩個數組相加 ``` let a = [1, 2], b = [5, 3]; console.log(a + b); //1,25,3 相當于調用了toString() ``` + ==相等比較 我們都知道```+0、-0、false、null、undefined、""、NaN```都是假值。 我們來看幾個例子: ``` console.log(a + b); //1,25,3 console.log(false == ""); //true console.log(false == []); //true console.log(false == 0); //true console.log(false == null); //false console.log(false == undefined); //false console.log(false == NaN); //false console.log(false == {}); //false ``` ``` console.log("" == []); //true console.log("" == 0); //true console.log("" == null); //false console.log("" == undefined); //false console.log("" == NaN); //false console.log("" == {}); //false ``` ``` console.log(0 == ""); //true console.log(0 == []); //true console.log(0 == null); //false console.log(0 == undefined); //false console.log(0 == NaN); //false console.log(0 == {}); //false ``` 還有幾個比較難以理解的例子: ``` console.log([] == ![]); //true 因為![] = false, false == []是成立的。 2 == [1] //true "" == [null] //true 0 == "/n" //true 因為"/n"被轉換為0 ``` + [] + {}的問題 ``` console.log([] + {}); // "[object Object]" [] = "", "" + {} 調用{}的toString() console.log({} + []); // 0 只不過是轉換的前后順序不同 ```
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/100826.html
摘要:前言接上篇前端筆試題面試題記錄上。默認值,不脫離文檔流,,,,等屬性不生效。。不脫離文檔流,依據自身位置進行偏離,當子元素設置,將依據它進行偏離。。 前言 接上篇前端筆試題面試題記錄(上)。趁清明小長假,把上篇剩下的部分也寫一下,因為最近比較忙這篇已經拖了很久了。現在剛剛開始銀四了,應該還是有些小伙伴在找工作,時間還不算太晚,希望本篇可以幫到這些小伙伴。 個人博客了解一下:obkoro...
摘要:前言接上篇前端筆試題面試題記錄上。默認值,不脫離文檔流,,,,等屬性不生效。。不脫離文檔流,依據自身位置進行偏離,當子元素設置,將依據它進行偏離。。 前言 接上篇前端筆試題面試題記錄(上)。趁清明小長假,把上篇剩下的部分也寫一下,因為最近比較忙這篇已經拖了很久了。現在剛剛開始銀四了,應該還是有些小伙伴在找工作,時間還不算太晚,希望本篇可以幫到這些小伙伴。 個人博客了解一下:obkoro...
摘要:兩種元素必須擁有相同的父元素,但是不必直接緊隨。臨時移動重定向未修改訪問緩存數據客戶端錯誤,請求包含語法錯誤或無法完成請求身份為認證服務器錯誤,服務器在處理請求的過程中發生了錯誤服務器內部錯誤持續更新 對平常的小知識點,會持續更新 == 對比 特殊原則 undefined == null / null == undefined number 和 string/boolean 對比將...
摘要:將構造函數的作用域賦值給新對象。也所以對象指向新對象執行構造函數內部的代碼,將屬性添加給中的對象。通常的解決方案是判斷是否是構造函數的實例,若是則繼續執行,若不是則進行的操作。代碼如下在構造函數參數個數固定的情況下這種方案是可行的。 首先,一般的都是介紹自己,主要是項目經歷 問題1:jQuery與Vue的區別是什么? JQuery和Vue的主要區別是JQuery主要是通過選擇器來選取D...
閱讀 2473·2021-09-29 09:34
閱讀 3310·2021-09-23 11:21
閱讀 2501·2021-09-06 15:00
閱讀 1129·2019-08-30 15:44
閱讀 2030·2019-08-29 17:23
閱讀 3001·2019-08-29 16:44
閱讀 3060·2019-08-29 13:13
閱讀 1939·2019-08-28 18:12