JS MDN 学习笔记(函数)6

一、定义函数

①函数声明

function square(number) {
  return number * number;
}

原始参数(比如一个具体的数字)被作为值传递给函数;值被传递给函数,如果被调用函数改变了这个参数的值,这样的改变不会影响到全局或调用函数;
如果你传递一个对象(即一个非原始值,例如Array或用户自定义的对象)作为参数,而函数改变了这个对象的属性,这样的改变对函数外部是可见的

②函数表达式

匿名函数

var square = function(number) { return number * number; };

也可提供函数名,并且可以用于在函数内部代指其本身,或者在调试器堆栈跟踪中识别该函数:

var factorial = function fac(n) {return n<2 ? 1 : n*fac(n-1)};
console.log(factorial(3));

③Function 构造器*

二、调用函数

递归:函数可以自己调用自己

三、函数作用域

四、作用域和函数堆栈

递归
一个函数可以指向并调用自身:
①函数名
argument.callee
③作用域下的一个指向该函数的变量名

var foo = function bar() {
   //bar()
   //arguments.callee()
   //foo()
   //这三种语句是等价的
};

嵌套函数和闭包
一个函数嵌套另外一个函数,内部函数对其外部函数是私有的,自身形成了一个闭包。
一个闭包是一个可以拥有独立的环境与变量的表达式(通常是函数)
嵌套函数是一个闭包,嵌套函数可以继承容器函数的参数和变量,内部函数包含外部函数的作用域
总结:内部函数只可以在外部函数中访问;内部函数形成了一个闭包,它可以访问外部函数的参数和变量,但是外部函数却不能使用它的参数和变量。

function outside(x) {
  function inside(y) {
    return x + y;
  }
  return inside;
}
fn_inside = outside(3); // 可以这样想:给一个函数,使它的值加3
result = fn_inside(5); // returns 8

result1 = outside(3)(5); // returns 8

保存变量
上述例子,inside 被返回时 x 是怎么被保留下来的?

多层嵌套函数
作用域链

命名冲突
优先级:
inside> outside>全局对象

五、闭包

var getCode = (function(){
  var secureCode = "0]Eal(eh&2";    // A code we do not want outsiders to be able to modify...
  
  return function () {
    return secureCode;
  };
})();

getCode();

六、使用 arguments 对象

函数的实际参数会被保存在一个类似数组arguments对象中

arguments[i]

七、函数参数

默认参数
JS中函数参数默认值是undefined

过去:

function multiply(a, b) {
  b = (typeof b !== 'undefined') ?  b : 1;

  return a*b;
}

multiply(5); // 5

ES6:

function multiply(a, b = 1) {
  return a*b;
}

multiply(5); // 5

剩余参数
将不确定数量的参数表示成数组

function multiply(multiplier, ...theArgs) {
  return theArgs.map(x => multiplier * x);
}

var arr = multiply(2, 1, 2, 3);
console.log(arr); // [2, 4, 6]

八、箭头函数

简洁、 this

九、预定义函数

eval()
isFinite()
isNaN()
parseFloat()
parseInt()
decodeURI()
decodeURIComponent()
encodeURI()
encodeURIComponent()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值