前端学习

**考试重点**

2019-01-03  本文已影响0人  本来无一物_f1f2

函数的五种声明方式

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

 var f = new Function('x','y','return x+y')
 f.name // "anonymous"
  1. 箭头函数
 var f = (x,y) => {
     return x+y
 }
 var sum = (x,y) => x+y
 var n2 = n => n*n

考点·函数的name属性

name属性返回关键字后的名字
如果用new声明一个函数那么他的名字会叫anonymous(匿名)

如何调用一个函数

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

函数调用内存图
可以执行一个代码的函数就叫做对象

什么是call stack

调用栈瀑布图

this 和arguments

call的第一个值可以用this得到

作用域

面试题1

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

拿到代码直接做——必然会错。请先提升声明

面试题2

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

拿到代码直接做——必然会错。请先提升声明

面试题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?
    }
}

拿到代码直接做——必然会错。请先提升声明


作用域

闭包

var a=1

function f4(){
    console.log(a)//2}

如果一个函数使用了他范围外的变量,那么(这个函数+这个变量) 就叫做闭包,闭包的用途

  1. 模仿块级作用域
  2. 存储变量
  3. 封装私有变量
上一篇下一篇

猜你喜欢

热点阅读