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 指向新创建的对象

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 变量声明且赋值 : 变量赋值的优先级 > 函数声明
网友评论