• JS面试题



    for(var i = 0; i < 5; i++) { setTimeout(function() { console.log(i); }); } for(var i = 0; i < 5; i++) { (function(i) { setTimeout(function() { console.log(i); }); })(i); }

    结果:  

    5
    5
    5
    5
    5
    0
    1
    2
    3
    4

    setTimeOut()会在所有可执行函数执行后在执行。

    匿名函数会立即执行。

    function foo1() {
        var value = 1 +
            1
        return value;
    }
    //JS中如果一个语句以[(/+-开头,就有可能和上一句加在一起解析
    function foo2() {
        return
        {
            bar: 'hello'
        };
    }
          //return 后会自动添加分号,不管下一条语句是什么
    console.log(foo1());
    console.log(foo2());
    

      结果:

    2
    undefined

    (function() {
        var a=b= 3 ;
    })();
    //a是局部变量,匿名函数运行完毕直接销毁,b声明为全局变量,会一直存在。
    console.log("a defined? " + (typeof a !== 'undefined'));
    console.log("b defined? " + (typeof b !== 'undefined'));
    
    console.log(b);
    console.log(typeof a);
    

      结果:

    a defined? false
    b defined? true
    3
    undefined

    var object = {
        foo: "bar",
        func: function() {
            var self = this;
            console.log(this);
            console.log("outer func: this.foo = " + this.foo);
            console.log("outer func: this.foo = " + self.foo);
            (function() {
                console.log("inner func: this.foo = " + global.foo);
                console.log("inner func: this.foo = " + self.foo);
            })();
        }
    };
    //global 是 javascript 运行时所在宿主环境提供的全局对象,是一个 Object。目前来说最常见的宿主环境是浏览器和 nodejs,浏览器暴露了一系列操作 DOM, Location, History 等 Api 供 Js 调用(即 window 对象)而 nodejs 里则没有浏览器里的 DOM 等,可以运行 for (var i in global){console.log(i)} 查看这个全局对象提供的方法,如 process, buffer 这些 nodejs 的资源。
    //匿名函数的this指的是global对象(nodejs环境下)浏览器环境下就是window对象
    object.func();
    

      结果:

    { foo: 'bar', func: [Function: func] }
    outer func: this.foo = bar
    outer func: this.foo = bar
    inner func: this.foo = undefined
    inner func: this.foo = bar

    var scope = "global";
    function func() {
        console.log(scope);
        var scope = "local";
    }
    //变量提升  undefined
    func();
    

      

    console.log((function f(n) { return ((n > 1) ? n * f(n-1) : n); })(10));
    //阶乘  匿名函数
    //结果是10的阶乘的结果
    
    console.log((function (n) {
        return n;
    })(8))
    //匿名函数 第二个括号是函数参数
    

      

    console.log("1" + 1);      //字符前加+ -会把它变成number类型
    console.log(1 + "2" + "2");  //122
    console.log(1 + +"2" + "2"); //32
    console.log(1 + -"1" + "2");  //02
    console.log(+"1" +  "1" + "2");   //112
    console.log("A" - "B" + "2");     //NaN2
    console.log("A" - "B" + 2);   //NaN +2 还是NaN
    console.log("A" - "B"); //NaN
    //JS在进行这种运算时 仅仅会在2个值相加时优先推断为string类型 其它情况下(比如“-”。“*”。“/”)都默觉得number型运算。
    

      

    //判断一个方法是不是数组
    //方法一
    function isArray(obj) {
        return Object.prototype.toString.call(obj) === "[object Array]";
    }
    
    //方法二
    function isArray(obj) {
        return obj.__proto__ === Array.prototype;
    }
    
    //方法三(ES5)
    Array.isArray(obj);
    

      

    function Example() {
        getName = function() { console.log(1); };
        return this;
    }
    Example.getName = function() { console.log(2); };
    Example.prototype.getName = function() { console.log(3); };
    
    console.log(typeof Example);  //function
    console.log(typeof Example()); //object
    Example.getName();           //函数的方法
    Example().getName();          //对象的方法
    new Example.getName();        //new 一个函数的方法 结果还是2
    new Example().getName();      //原型对象方法,实例共享时使用
    

      结果:

    function
    object
    2
    1
    2
    3

  • 相关阅读:
    14 procd
    13 netifd
    12 ubus
    18 iptables
    架构的学习
    Sqlserver 差异备份
    shiro学习笔记——shiro拦截器与url匹配规则
    使用Global Mapper14去除tif影像黑边/白边
    非GeoServer卫星影像及电子地图的瓦片方式发布
    Centos7安装Redis
  • 原文地址:https://www.cnblogs.com/lilight/p/7800445.html
Copyright © 2020-2023  润新知