首先var定义的变量或者直接在全局作用域声明的函数,都是存在windows中的
而 ES6中的let和const声明的变量和方法是单独生成一个块来保存的
建议使用let,const来声明。避免污染全局windows的方法和属性
函数执行期上下文
function text(a,b) {
console.log(a)
c = 0
var c
a = 5
b = 6
conole.log(b)
function b() {}
function d() {}
console.log(b)
}
text(1)
// 创建AO = {
a = undefined > 1 > 5
b = undefined > function b() {} > 6
c = undefined > 0
d = function d() {}
}
// 输出 1,6,6
// 首先找到函数中的变量,然后将实参定义形参及函数,然后是赋值
函数的arguments获取实参,length获取行参的个数
function text(a,b,c){
console.log(text.arguments) //已堆的形式存储【1,2,3】
}
text(1,2,3)
函数的优化=>箭头函数
let array = [1,2,3,4,5,6].filter(function(value, index) {
return value >= 3
})
let array = [1,2,3,4,5,6].filter(value=> value >= 3)
首先将function函数去掉使用=>箭头 , 如果函数参数为一个可以去掉(),如果表达式为一行可以将return去掉,默认return。
函数中this
const obj = {
name: 'qihuanran',
fun() {
console.log(this.name) // qihuanran
function nes() {
console.log(this.name) // undefined
}
}
}
obj.fun()
当函数以对象属性的形式出现时、this指向当前的对象。不以对象属性出现时this指向window。
如果想让函数nes指向对象,可以在nes外部定义let This = this因为外部的this指向当前对象。
函数递归
就是函数调用自己
function text(n){
return text(n) * 1
}
consloe.log(text(4)) // 4