-------------
- JS中的函数也是一种对象
- 函数的返回值是return来决定的,没有则返回undefined
1、函数声明法
-
-
function add(a, b) { a = a + a; b = b + b; }
2、函数表达式法
-
var add = function (a , b){ ......};
-
(function(){......}());
-
return function (){......}
-
var add =function foo(a,b){......}; //命名式函数表达式,存在兼容问题,并不常用
-
-
-
- 为什么函数声明的前面可以提前调用该函数?
- 因为函数声明在加载时是被预先处理的,而函数表达式中,只有函数里声明的变量会被预先处理。
-
add(5,4); var add =function foo(a,b){alert(a+b)};
- 而函数表达式本身并不会。所以,在函数表达式前调用该函数则会报错。
- (暂时没想到栗子)
3、Function 构造器
-
var func = new Function(‘a‘,‘b‘,‘console.log(a+b);‘) func(4,5);
- 为什么函数声明的前面可以提前调用该函数?
-
4、箭头函数
-
-
- 在ES 6 标准下新增加了一种函数:箭头函数
- 例如:
x => x*x //等价于 function (x){ return x*x; }
- 箭头相当于省略了"function"、"{}"、"return"关键字样
- 在以下特殊情况需要有特殊的变化
- 参数不是一个的情况
(x,y)=> x + y ; //两个参数 ()=> 500; //无参数 //可变参数的情况 (x,y, ...rest) => { return x+y; }
- 返回的内容是对象的情况
x => { foo : x} //错误写法 x => ({foo : x }) //正确写法
- 箭头函数完全修复了 this 关键字的指向问题,在箭头函数中,this总是指向词法作用域,也就是外层调用者
var obj_arrow = { birth:1990, getAge:function(){ var b = this.birth; var fn = ()=>new Date().getFullYear()-this.birth; return fn(); } } console.log(obj_arrow.getAge()); //26 这里的this 直接指向obj
箭头函数使用 apply 与 call 时候,因为其内部的 this 以固定指向此法作用域,则 call 与 apply 传入的第一个参数被忽略
- 参数不是一个的情况
-
时间: 2024-10-12 12:48:04