zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    不支持ie9一下代码
    jquery ajax done 函数 异步调用方法中不能给全局变量赋值的原因及解决办法
    WaitMe是一款使用CSS3来创建加载动画的jQuery插件
    Masked Input这个jQuery插件让用户能够按照预先设定好的固定格式输入数据(如日期、电话号码等)
    Autosize插件允许textarea元素根据录入的内容自动调整元素的高度
    两个列表选项插件bootstrap-duallistbox.js
    jquery滚动插件slimscroll
    modernizr.custom.js应用
    bootbox基于bootstrap的扩展弹窗
    洛谷P3503 [POI2010]KLO-Blocks 单调栈
  • 原文地址:https://www.cnblogs.com/lilight/p/7800445.html
Copyright © 2011-2022 走看看