365体育投注_体育投注推荐

体育投注xin

体育投注推荐,js比较火的面试题含365体育投注(一)

365体育投注

this指向

// 构造函数返回值不是 function 或 object。new Super() 返回的是 this 对象。function Super(age) {    this.age = age;}let instance = new Super(26);console.log(instance.age); // 26// 构造函数返回值是 function 或 object,new Super()是返回的是Super中return的对象。function Super(age) {    this.age = age;    let obj = {a: 2};        return obj;}let instance = new Super(26);console.log(instance); {a: 2}console.log(instance.age); // undefined// 归结为显式绑定,函数是否通过 call,apply 调用,或者使用了 bind 绑定,如果是,那么this绑定的就是指定的对象function info() {    console.log(this.age);}let person = {    age: 26,    info,}const age = 28;info.call(person); // 26info.apply(person); // 26info.bind(person)(); // 26info.call(window); // 28// 归结为隐式绑定,函数的调用是在某个对象上触发的,即调用位置上存在上下文对象。典型的隐式调用为: xxx.fn()funtion info() {    console.log(this.age);}const person = {    age: 26,    info,}const age = 28;person.info(); // 26// 箭头函数的情况:箭头函数没有自己的this,继承外层上下文绑定的this。let obj = {    age: 26,    info: function() {        return () => {            console.log(this.age); // this继承外层上下文绑定的this        }    }}let person = {age: 28};let info = obj.info();info(); // 26let info2 = obj.info.call(person);info2(); // 28

call/apply 的实现原理

  • 都是改变 this 的执行,并立即执行函数

  • 传参方式不同。

  • call(thisArg,arg1,arg2)

// 例1window.color = "red"; const s1 = {color: "blue" };function changeColor(){    console.log(this.color);} changeColor.call(); // red (默认传递参数)changeColor.call(this); // redchangeColor.call(s1); // blue// 例2let Pet = {    words: "123",    speak: function(say) {        console.log(say + this.words)    }}Pet.speak("Speak"); // Speak123let Dog = {    words: "456"}// 将this指向了DogPet.speak.call(Dog, "Speak"); // Speak456// 例3const num = 1;setTimeout(funciton(){    cont num = 2;    const data = {        num: 3,        getNum() {            return this.num;        }    }        console.log(data.getNum()); // 2    console.log(data.getNum().call(this)) // 1 指向全局window}, 0)
  • apply(thisArg,[argsArray])

function Pet(words){    this.words = words;    this.speak = function () {        console.log( this.words)    }}function Dog(words){    Pet.call(this, words); //结果: Wang    Pet.apply(this, arguments); //结果: Wang}const dog = new Dog("Wang");dog.speak();

解构赋值

const {name: myName} = {name: "ghm"};console.log(name); // ReferenceError引用错误console.log(myName); // ghm注:从右侧解构赋值时,将值ghm赋值给myName的变量;使用{name: myName},创建了一个myName的新变量,其值是右侧属性值;当打印name时,他表示的是一个未定义的变量,所以会报ReferenceError。

let/const声明的块级作用域

(1)function checkAge(age) {    if(age < 18) const message = "young";    if(age > 18) const message = "old";        return message;}console.log(checkAge(19)); // ReferenceError引用错误注:块级作用域指大括号{}直接的作用域,即例中if/else声明的区域,所以我们无法在声明的块之外引用变量,会抛出错误。(2)function say() {    console.log(name); // undefined    console.log(age); // ReferenceError引用错误        var name = "ghm";    let age = 23;}say();注:var与let/const不同的就在,var在创建时变量就会被提升,默认值为undefined;而let/const在初始化时没有被提升,在这之前是不可访问这个变量,称为暂时性死区,当在变量声明之前去调用他时,就会抛出错误。(3)let name = "ghm";{    console.log(name); // ReferenceError引用错误    let name = "ggg";}注:正常情况下应该输出ghm,但是它报错了,就说明大括号中的name变量提升了,它虽然提升了,但是存在暂时性死区。总结来说变量的赋值有三个阶段:创建(内存中分配空间),初始化变量,赋值。let/const: 创建时被提升,初始化时没有被提升(即暂时性死区)var: 创建和初始化时都被提升了

函数传参

function funcArgu(sum1, sum2 = sum1) => {  console.log(sum1 + sum2);}func(10); // 20func(10, 20); // 30注:可以将参数的默认值设置为等于另一个参数值,只要另一个参数值定义在他之前即可。

数组方法push返回值

let newList = [1,2,3].push(4);console.log(newList.push(5)); // Error注:push返回的是数组长度,newList=5;数值不具有push方法。

箭头函数返回对象时

const getUser = (user) => {name: user.name, age: user.age};const user = {name: "ghm", age: 23};console.log(getUser(user)); // undefined注:对于箭头函数,如果指返回一个值,可以不用写();但当返回对象时,必须在圆括号之间编写它,否则不会返回任何值。

或(||)运算符的使用

const one = (false || {} || null);const two = (null || false || "");const three = ([] || 0 || true);console.log(one,two,three); // {} "" []注:||运算符返回第一个真值,如果所有值都是假值,则返回最后一个值。在运算符(||,&&)中,空对象或空数组都属于真值,0属于假值

js中的假值有6个

nullundefinedNaN0""false注:函数构造函数如new Boolean,new Number都是真值,空数组,空对象都是真值。

与(&&)运算符的使用

let one = 1, two = 2, three = 3;console.log(one && two && three); // 3console.log(0 && null); // 0

注:&&返回第一个条件为假的值,如果每个计算步骤都为真,则返回最后一个计算过的真值

这是我在github上摘录一些比较常见的js试题,更多原创试题请前往阅读原文。

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。

/chinagz9000_com/images/0.jpeg
我要收藏
赞一个
踩一下
分享到

分享
评论
首页