美文网首页
经典面试题javascript+es6

经典面试题javascript+es6

作者: Luoyilin | 来源:发表于2019-12-06 16:27 被阅读0次
1.0 || 和 &

问题 add(1&&2) add(0||1) 返回值分别是什么?
01). &&
-1.只要‘&&’ 前面是false ,无论‘&&’后面的是true 还是false ,都返回‘&&’前面的值 ;
-2.只要‘&&’前面是true,无论‘&&’后面是 true 还是false , 都返回‘&&’后面的值;
02).||
-1. 只要‘||’ 前面的值是false,无论‘||’后面的值是true还是false ,都返回‘||’后面的值;
-2. 只要‘||’前面的值是true,无论‘||’后面的值是true还是false,返回‘||’前面的值;

2.0 作用域

补充 : new 关键字做的四件事情 :
01). 创建一个新的临时对象({})
02).将临时对象绑定到原型中
03).执行构造函数的代码(为这个对象添加属性 通过this添加)
04).this 指向新创建的对象


image.png

console.log(inner.func,inner.func)() : 逗号运算符运算就是运算前面的 " ," 返回最后一个 inner.func ;

  function(){                          
        var out =30 ;
        return this out ;
     }//=>是一个匿名函数 可以改写成 ----->
  var  a= function(){
         var out =30 ;
        return this out 
     }
console.log(a()) //--->this指向的是window  ---> 25

console.log(inner.func)() : 显然是一个方法调用 this指向的是inner对象
console.log((inner.func)() ) : 相比括号内有运算符 先计算运算符的结果,没有运算符的直接去掉括号就好 就是 inner.func() 调用 同3
console.log(inner.func=inner.func)() : 先进行赋值操作 将对象的方法inner.func 赋值给一个变量 inner.func ,inner.func 是一个匿名函数, 同1,所以this指向window

补充 作用域的解释

01) 作用域定义变量的区域 ;
02)作用域规定了如何查找变量,换句话说就是当前执行的代码 对变量的访问权限 ;
03)ECMAScript6之前只有全局作用域和函数作用域
04)javascript中词法作用域也就是静态作用域 ;

变量作用域 包括词法作用域(静态作用域)和动态作用域
词法作用域: 编程时上下文 关注的是函数在何处被定义;(换句话说: 函数在定义他们的作用域中运行,而不是在执行他们的作用域中执行如下: 词法作用域)

var name ="luoyilin";
function getName(){
 console.log(name) //--->undefined(同一个作用域中变量声明提前,但变量赋值没有 ,已声明却未赋值所以是undefined)
 var name ="qianduan"
console.log(name);//---->qianduan
}
getName() //--> 函数的声明和调用在同一个作用域中(即全局作用域)

动态作用域: 调用时上下文及常用的this的用法,关注的是函数在何处被调用 ;

var name = "luoyilin"
function getName(){
  console.log(name) // ---> luoyilin
}
function getOtherName(){
// 当前调用栈是: getFoo->getOtherName 
//因此,当前的调用位置是getFoo
var name ="前端依琳"
getName()// -----> getName() 函数  调用的作用域和定义的作用域不再同一个作用域 
}
function getFoo(){
//当前调用栈是:getFoo
//因此,当前调用位置是全局作用域
getOtherName()  
}
getFoo()
3.函数声明 变量声明 变量赋值 优先级

函数声明

function person(arg1,arg2,……){
    //函数体
}

变量赋值
注意 : 如下不是函数,而是函数表达式 相当于变量赋值 ;
(函数表达式没有提前 ,就相当于平时的变量赋值)

var person = function(arg1,arg2,……){
   //函数体
}

函数声明会覆盖变量声明,但是变量赋值不会被覆盖;

//1.0变量只声明
function value(){
  return "1"
}
var value
console.log(typeof value) //--->'function'
//2.0 变量声明且赋值
function value(){
  retrun "1"
}
var value = 1
console.log(typeof value) //----->'number'

总结:
1.0 变量只声明 : 函数声明优先级 > 变量声明
2.0 变量声明且赋值 : 变量赋值的优先级 > 函数声明

相关文章

网友评论

      本文标题:经典面试题javascript+es6

      本文链接:https://www.haomeiwen.com/subject/gvsegctx.html