js练习题

这篇博客详细探讨了JavaScript中的各种概念,包括变量提升、this指针、运算符优先级、原型和继承、作用域链等。还讨论了特定的编程挑战,如map、for...of与for...in的区别、异步控制、replace方法以及Math.random()的用法。此外,还解释了Object.create(null)与普通对象的区别,并提出了控制异步请求最大并发量的策略。
摘要由CSDN通过智能技术生成

1.包括变量定义提升、this指针指向、运算符优先级、原型、继承、全局变量污染、对象属性及原型属性优先级等等。

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
getName();//1
new Foo.getName();//2
new Foo().getName();//3
new new Foo().getName();//3

变形

      function Foo() {
        this.getName = function () {
          alert(1);
        }; //这里变了  加了this
        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
      getName(); //1
      new Foo.getName(); //2
      new Foo().getName(); //1
      new new Foo().getName(); //1

参考题解:
Foo,getName题解分析
天空003

函数中嵌套函数

var length = 10;
function fn(){
    console.log(this.length);
}
var obj = {
    length:5,
    method:function(fn){
        fn(); //10
        arguments[0](); //2
    }
};
 
obj.method(fn,1);

1.fn()知识点:任意函数里如果嵌套了 非箭头函数,那这个时候,嵌套函数里的 this 在未指定的情况下,应该指向的是 window 对象,所以这里执行 fn 会打印 window.length,但是 let 声明变量时会形成块级作用于,且不存在变量提升,而 var 存在声明提升。所以当使用 let 声明变量时,length 属性实际上并没有添加到 window 对象中。

2.argumengs0 知识点:在方法调用(如果某个对象的属性是函数,这个属性就叫方法,调用这个属性,就叫方法调用)中,执行函数体的时候,作为属性访问主体的对象和数组便是其调用方法内 this 的指向。(通俗的说,调用谁的方法 this 就指向谁)
这里 arguments0 是作为 arguments 对象的属性 [0] 来调用 fn 的,所以 fn 中的 this 指向属性访问主体的对象 arguments

参考:*每日一题(三七)let length = 10 function fn(){ console.log(this.length) } var obj = { length:5,

[‘1‘,‘2‘,‘3‘].map(parseInt)结果讲解

[‘1‘,‘2‘,‘3‘].map(parseInt)结果讲解

[] ==![] 为true

答案详解

作用域链


inner = 'window';

function say() {
   
    console.log(inner);
    console.log(this.inner);
}

var obj1 = (function() {
   
    var inner = '1-1';
    return {
   
        inner: '1-2',
        say: function() {
   
            console.log(inner);
            console.log(this.inner);
        }
    }
})();

var obj2 = (function() {
   
    var inner = '2-1';
    return {
   
        inner: '2-2',
        say: function() {
   
            console.log(inner);
            console.log(this.inner);
        }
    }
})();

var obj3 = (function() {
   
    var inner = '3-1';
    return {
   
        inner: '3-2',
        say: () => {
   
            console.log(inner);
            console.log(this.inner);
        }
    }
})()

say();
obj1.say();
obj2.say();
obj3.say();
obj1.say = say;
obj1.say();
obj1.say = obj2.say;
obj1.say();

在这里插入图片描述

Object.create(null) 和{}的区别

1.通过 Object.create(null) 创建的对象是不继承Object原型链上的属性,如tostring()方法这些

var obj = Object.create(null
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值