学习笔记——函数声明和函数表达式
函数声明
- 必须有函数名
function func(){}
函数声明如果出现在表达式的位置,则被转化为函数表达式
// 圆括号(分组操作符)内只能是表达式
(function foo() {});
// 在数组只能是表达式
[function bar() {}];
// 逗号也只能操作表达式
1, function baz() {};
const obj = {
aa: function Inner() {
return '123'
}()
}console.log(obj);
- 函数声明会提升
func();
function func(){}
函数表达式
- 函数名可选
const func = function(){}const func2 = function Inner(){
console.log(Inner);
}console.log(Inner);
命名的函数表达式,函数名在外部是无效的,只能在函数内部使用。
面试题
var a = 100;
if (function b() { }) {
a += typeof (b);
}console.log(a);
- 函数表达式不存在变量提升
- 函数的实参个数 arguments.length;
- 函数的形参个数 funcName.length;
function Test(a){
console.log(arguments.length, '实参');
console.log(Test.length, '形参');
}Test(1,2)
实参 arguments[0],形参 a,虽然它们的存储位置是不同的,但是它们是一一隐射关系,一一映射的关键,是需要实参传值,如果不传值,则无法建立关系,有一一映射关系时,修改形参时,实参也会被修改,否则不会。
function Test(a){
a =100;
console.log(arguments);
}Test(1,2)function Test(a,b){
b =100;
console.log(arguments[1]);
}Test(1)
- 形参的默认值是 undefined
- 【学习笔记——函数声明和函数表达式】当实参为undefined,则取值形参;当形参为undefined,则取值实参;当都为undefiend,则为 undefined
function Test(a,b){ console.log(a,b); }// 上面的代码等于下面的代码 function Test(a=undefined,b=undefined){ console.log(a,b); }Test(1,2)function Test1(a = 10,b){ console.log(a,b); }Test1(undefined,2)
推荐阅读
- 急于表达——往往欲速则不达
- 慢慢的美丽
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- EffectiveObjective-C2.0|EffectiveObjective-C2.0 笔记 - 第二部分
- 2019-02-13——今天谈梦想()
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- Ⅴ爱阅读,亲子互动——打卡第178天
- 由浅入深理解AOP
- 低头思故乡——只是因为睡不着
- 取名——兰