国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

變量提升的考試題

jerryloveemily / 2268人閱讀

摘要:看了幾道變量提升的小題想分享給大家,都很簡單,我這里就不解釋原因了。因為被轉換為的問題調用的只不過是轉換的前后順序不同

看了幾道變量提升的小題想分享給大家,都很簡單,我這里就不解釋原因了。

我們先說一下預編譯的過程

創建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...

    Lin_YT 評論0 收藏0
  • 前端筆試題試題記錄(下)

    摘要:前言接上篇前端筆試題面試題記錄上。默認值,不脫離文檔流,,,,等屬性不生效。。不脫離文檔流,依據自身位置進行偏離,當子元素設置,將依據它進行偏離。。 前言 接上篇前端筆試題面試題記錄(上)。趁清明小長假,把上篇剩下的部分也寫一下,因為最近比較忙這篇已經拖了很久了。現在剛剛開始銀四了,應該還是有些小伙伴在找工作,時間還不算太晚,希望本篇可以幫到這些小伙伴。 個人博客了解一下:obkoro...

    suemi 評論0 收藏0
  • js css 基礎知識點和面試題復習

    摘要:兩種元素必須擁有相同的父元素,但是不必直接緊隨。臨時移動重定向未修改訪問緩存數據客戶端錯誤,請求包含語法錯誤或無法完成請求身份為認證服務器錯誤,服務器在處理請求的過程中發生了錯誤服務器內部錯誤持續更新 對平常的小知識點,會持續更新 == 對比 特殊原則 undefined == null / null == undefined number 和 string/boolean 對比將...

    yeooo 評論0 收藏0
  • 字節跳動前端一面試題及答案

    摘要:將構造函數的作用域賦值給新對象。也所以對象指向新對象執行構造函數內部的代碼,將屬性添加給中的對象。通常的解決方案是判斷是否是構造函數的實例,若是則繼續執行,若不是則進行的操作。代碼如下在構造函數參數個數固定的情況下這種方案是可行的。 首先,一般的都是介紹自己,主要是項目經歷 問題1:jQuery與Vue的區別是什么? JQuery和Vue的主要區別是JQuery主要是通過選擇器來選取D...

    roundstones 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<