发表于: 2021-10-16 22:17:40

0 1074


今天完成的事情:学习了变量和函数提升,作用域。试写方法数组去重。

明天计划的事情:尝试理解闭包

遇到问题:

        var x = 20;
        function a(y){
            var x = 10;
            return get(y)
        }
        function get(y){
            return x + y;
        }
        console.log(a(10));

a(10) ==> 调用a方法,return get方法 ==> 调用get方法,此时的this指向的是window,所以get方法中的x应该是20,所以console返回的结果应该是30.


        console.log(a);
        var a = 1;
        console.log(b);
        let b = 1;
        console.log(c);
        function c(){};  
        //写出输出值
   

此题略坑,结果应该是undefined 和报错。

W3C用 let 或 const 声明的变量和常量不会被提升!

通过 var 声明的变量有初始值 undefined,而通过 let 声明的变量直到定义的代码被执行时才会初始化。在变量初始化前访问变量会导致 ReferenceError

所以执行到第二个console.log(b)时候,因为b未被申明,所以应该报错(实际设计器中会报 Cannot access 'b' before initialization),到这边代码不会继续执行


收获:尝试在原型链上写数组去重的方法:

        Array.prototype.unique = function(){
            var lis = [];
            var len = this.length;
            var paras = {};
            for (var i = 0; i < len; i++) {
                if (!paras[this[i]]) {
                    paras[this[i]] = "abc";
                    lis.push(this[i]);
                }              
            }
            console.log(lis);
            return lis;
        }

原理是利用对象的属性值不可重复的特性,将不重复的属性名push进新的数组。

通过baidu查询得到数组去重的其他方法:https://www.cnblogs.com/zsp-1064239893/p/11196501.html    以供以后查询


返回列表 返回列表
评论

    分享到