JavaScript函数
函数5种声明
函数是变量(7种)的特例。console.log永远返回undefined,打印和返回无关
1. 具名函数
function(关键字) x(input1, input2){
return undefined //不写或只写return的话自动返回undefined
}
2. 匿名函数
使用匿名函数必须声明一个变量
var x = function (a,b){ return }
3. 函数有名字且交给一个变量
var x = function y(a, b){}
和直接声明function y有什么区别?
写 function y(){}可以立刻使用,也可以console.log(y),但是var x = function y(a, b){},console.log(y)报错,不一致,就是js垃圾之处,单独记忆。
4. 基本不会用 window.Function 函数对象
new Function('x', 'y', 'return x+y') 第一参数,第二参数 返回值
面试题:
var n = 1
f = new Function('x', 'y', 'return x +' + n + '+y')
f(1,2) = 4 or '1n2' 4!!!
5. (x, y) => {return x+y} 箭头函数
sum = (x,y) => {return x+y} 复杂情况用;
若参数只有一个,括号可以不要。 n2 = n=> n*n
function f(){}
f.name === undefined
var f2 = function(){}
f2.name === undefined
var f3 = function f4(){} 有点离谱难懂。。。。。
f3.name === 'f4'
f5 = new Function('x', 'y', 'return x+y')
f5.name === 'anonymous'
函数是可以执行一段代码的对象。
f(1,2)不是真实用法是( 糖 ),f.call(undefined, 1, 2)是真正的 (硬核) 调用方法。
call的第一个参数,可以用this得到;call 的后面的参数,可以用arguments得到
在函数普通模式下,如果this传undefined,则默认是window。
在函数严格模式下,如果this传undefined,则为undefined。
f = functin(){
'use strict'
}
函数作用域:是树的数据结构
a = 3 (无var)优先赋值,当前作用范围无,去父亲那里找,找到赋值,找不到声明全局变量、并赋值
看到代码首先先进行声明提升!!!!!划分他们的作用域
闭包:如果一个函数,使用了它范围外的变量,那么这个函数+这个变量就叫闭包。
setInterval 需要随时可能把它砸了
若需要砸,则:var timerId = setInterval( ()=>{console.log(1) }, 1000 )
例如鼠标进入桌面就砸了闹钟,
$('.window').on('mouseenter', function(){
window.clearInterval(timerId)
})
鼠标走了,闹钟再走
$('.window').on('mouseleave', function(){
timerId = setInterval(() => {}, 1000 )
...
}