JS里的函数

2018-05-18  本文已影响10人  加油吧_

1. 五种声明方式

1.1 具名函数
function f(x,y) { return x+y }
f.name // 'f'

1.2.匿名函数
var f;
f = function(x,y){
return x+y
}
f.name // 'f'

1.3 具名函数赋值
var f;
f = function f2(x,y){ return x+y }
f.name // 'f2'
console.log(f2) // undefined

1.4 window.Function
var f = new Function('x','y','return x+y')
f.name // "anonymous"

1.5 箭头函数
var f = (x,y) => { return x+y}
var sum = (x,y) => x+y
var n2 = n => n*n

2. 函数的本质

函数:可以执行代码的对象就是函数。

函数调用:f.call(undefined,1,2)

从第二个开始传第一个参数

functionf(x,y){return x+y}
f.call(undefined,1,2)   // 3
f.call(undefined,3,4)  // 7

3. this 和 arguments

如何调用函数
f.call(asThis, input1,input2)
其中 asThis 会被当做 this,[input1,input2] 会被当做 arguments
禁止使用 f(input1, input2),因为学会 .call 才能理解 this

function f(){
    'use strict'
    console.log(this)
    console.log(arguments)
    return undefined
}

f.call(1,2,3) // this 为 1,arguments 为 [2,3]
this: call 的第一个参数(undefined)


this.png

arguments:call 的后面的参数可以用arguments得到

4. Call Stack 和 递归

callStack1.png call Stack2.png

5. 作用域 和 变量提升

作用域1.png

变量提升

变量提升1.png

作用域 与 变量提升的三大面试题

1 拿到题目,先变量提升

var a = 1;
function f1(){
    alert(a) // 是多少
    var a = 2
}
f1.call()  //undefined

2

var a = 1;
function f1(){
    var a = 2
    f2.call()
};
function f2(){
    console.log(a) 
}
f1.call()   //1

3

var liTags = document.querySelectorAll('li')
for(var i = 0; i<liTags.length; i++){
    liTags[i].onclick = function(){
        console.log(i) // 点击第3个 li 时,打印 2 还是打印 6?
    }
}     //6        
上一篇 下一篇

猜你喜欢

热点阅读