函数的 5 种声明方式
具名函数
function x(){}
匿名函数
1
2var a
a = function (){}
结合1, 2
1
var a = function x(){}
构造函数
window.Function('x', 'y', 'return x+y')
箭头函数(语法糖)
1
2
3
4
5
6
7
8
9//1.基本格式
(x,y) => {
n = (x * y) / 2
return n
}
//2.如果是直接return
(x, y) => (x*y) / 2
//3.只有一个参数可以不加 ()
x => x*x
函数的 name
属性
个人的感觉 name
将 JS
的不一致性体现的淋漓尽致,总是出乎你的意料
1 | function x(){} |
函数的本质
函数其实是一种特殊的 Object
,可以反复调用该代码块
1 | var f = function (){} |
this 与 arguments
在调用函数时大家都会理所当然的使用,f()
类似这样的方式,但是我们还可以用f.call(this, arguments)
这样的方式
1 | var f = function (x, y){ |
this 若为 undefined 一般的话是会被看成 window
1 | var f = function (x, y){ |
但在严格模式下就是 undefined
1 | var f = function (x, y){ |
变量提升
时刻谨记变量提升四个字,题目会经常在这个地方坑人
1 | var a = 2 |
其实只要记住变量提升那么这道题就会迎刃而解,相当于
1 | var a = 2 |
自然就是 undefined
, 若有人想的是 2,那可能误以为是
其实还与作用域有关系
1 | var a = 2 |
闭包
闭包在我看来就好像 Java 的私有属性,为了防止外部对重要数据的直接修改导致不必要的数据变化自然而然使用的手段,其实就是对变量作用域的灵活应用。
1 | function foo(){ |
参考: