小笔试题

2017-03-01  本文已影响0人  012ca771a446
01
 function foo() {
        var num = 123;
        console.log(num);
    }

    foo();            //123
    console.log(num); //报错---> 无法调用局部变量
02
 var scope = "global";
    foo();
    function foo() {
        console.log(scope); //undefined---> 函数内部的变量提升,但是没有定义
        var scope = "local";
        console.log(scope); //local--->就近原则
    }
    console.log(scope);       //global--->找到的是全局变量

//----------------------------------------------------------分割线    下面是变量提升后的代码:

    var scope
    function foo() {
        var scope;
        console.log(scope); //undefined
        scope = "local";
        console.log(scope); //local
    }
    scope = "global";
    foo();
    console.log(scope);       //global
```
######03


    function f1(){
        if("a" in window){
            var a = 10;
        }
        console.log(a); //undefined
    }
    f1();
    //-------------------------------------------------------分割线  变量提升后的代码分析:

    function f1(){
        var a;   //这个a不在window中,因此不进入if语句中
        if("a" in window){
            a = 10;
        }
        console.log(a); //打印出来是undefined
    }
    f1();

#####04
```
  if("a" in window){
        var a = 10;
    }
    console.log(a); //10

    //-------------------------------------------------------分割线  变量提升后的代码分析:

var a;
if("a" in window){
    a = 10//此处a为全局变量 即a为window的属性,符合条件进入if语句
}
console.log(a)//10
```

######05
```
    if(!"a" in window){
        var a = 10;
    }
    console.log(a); //? undefined  因为!"a" 无法进入if语句中 
```
######06
```
 var foo = 1;
    function bar() {
        if(!foo)
        {
            var foo = 10;
        }
        alert(foo); //  undefined? 10
    }
    bar();

    //-------------------------------------------------------分割线  变量提升后的代码分析:

 var foo;
 function bar() {
     var foo;
     if(!foo)
     {
          foo = 10;
     }
     alert(foo); //   10
 }
 foo = 1;
 bar();
```
######07
```
  function Foo() {
        getName = function(){
            console.log("1");
        };
        return this;
    }
    Foo.getName = function() {
        console.log("2");
    };

    Foo.prototype.getName = function(){
        console.log("3");
    };

    var getName = function() {
        console.log("4");
    };
    function getName(){
        console.log("5");
    }
    Foo.getName(); // 2
    getName(); // 4
    Foo().getName(); //1 ? 4 ? 2 ?报错  
    getName(); // ?    1
    new Foo.getName(); //  2
    new Foo().getName(); // 3
    new new Foo().getName(); // 3
```

######08

```
function Foo() {
        this.getName = function(){
            console.log(1);
        };
        return this;
    }
    var getName = function() {
        console.log(2);
    };

    function getName(){
        console.log(3);
    }

    Foo().getName();  //1
    getName();        //1
//注意输出的结果都为1
```

######09
考察变量的提升,和作用域
  ```

    var name = 'World!';

    (function () {

        if (typeof name === 'undefined') {
            var name = '陈奕迅';
            console.log('Goodbye ' + name);// Goodbye 陈奕迅;
        } else {
            console.log('Hello ' + name);
        }
    })();
```
######10
`console.log(Array.isArray(Array.prototype)); //true`
######11
注意:这里有陷阱`` 所有的数值里0为假,所以结果为flase.如果换成1就为true;
```
var a = [0];
    if ([0]) {

        //console.log([0] == true);//false
        console.log(a == true);//false
    } else {
        console.log("NO");
    }
```
######12
请给出下面代码的输出结果
```
 (function(){
        var x = y = 1;
    })();

    console.log(y); //能够获取y的值吗?
    console.log(x); //能够获取x的值吗?
```
这个稍微好理解点
```
 (function(){
        var x;//x是局部变量,外部无法访问
        y = 1;//这里y是全局变量
        x = y;
    })();

    console.log(y); //1
    console.log(x); //报错
```
















上一篇下一篇

猜你喜欢

热点阅读