一.函数的定义和调用
1.函数定义的几种方式
(1)函数声明方式function关键字(命名函数)
function 函数名(参数列表){
}
(2)函数表达式(匿名函数)
也就是不写函数的名字,将函数当作一个变量。
var test=function( 参数列表){
//函数体
}
(3)new Function()
2.函数的调用方式
(1)普通函数
function fn(){
console.log('1');
}
fn();或者fn.call();
(2)对象的方法
var o={
sayHi:functuin(){
console.log("1");
}
o.sayHi();
(3)构造函数
function Star(){};
new Star();
(4)绑定事件函数
btn,onclick=function(){};
(5)定时器函数
setInterval(function(){},1000);
(6)立即执行函数
(function(){
console.log("1");
})();
二.this
1.函数内this的指向
这些this的指向,是当我们调用函数的时候确定的。调用方式的不同决定了this的指向不同
2 改变函数内部this指向
JavaScript 为我们专门提供了一些函数方法来帮我们更优雅的处理函数内部this的指向问题,常用的有call()、apply()、bind()三种方法。
(1)call方法
(2)apply方法
(3)bind方法
总结
三.严格模式
(1)什么是严格模式?
JavaScript除了提供正常模式外,还提供了严格模式(strict mode)。ES5的严格模式是采用具有限制性JavaScript变体的一种方式,即在严格的条件下运行JS代码。
严格模式在IE10以上版本的浏览器中才会被支持,旧版本浏览器中会被忽略。
严格模式对正常的JavaScript语义做了一些更改:
1.消除了Javascript语法的一些不合理、不严谨之处,减少了一些怪异行为。
2.消除代码运行的一些不安全之处,保证代码运行的安全。
3.提高编译器效率,增加运行速度。
4.禁用了在ECMAScript的未来版本中可能会定义的一些语法,为未来新版本的Javascript做好铺垫。比如一些保留字如:class,enum,export,extends,import,super 不能做变量名
(2) 开启严格模式
严格模式可以应用到整个脚本或个别函数中。因此在使用时,我们可以将严格模式分为为脚本开启严格模式和为函数开启严格模式两种情况。
A.为脚本开启严格模式
为整个脚本文件开启严格模式,需要在所有语句之前放一个特定语句"use strict”;(或'use strict';)
有的script基本是严格模式,有的script脚本是正常模式,这样不利于文件合并,所以可以将整个即本文件放在一个立即执行的匿名函数之中。这样独立创建一个作用域而不影响其他 script脚本文件。
B.为函数开启严格模式
要给某个函数开启严格模式,需要把“use strict";(或'use strict';)声明放在函数体所有语句之前。
(3)严格模式中的变化
四.高阶函数
五.闭包
闭包是指有权访问另一个函数作用域中的变量的函数
六.递归
如果一个函数在内部可以调用其本身,那么这个函数就是递归函数。
简单理解:函数内部自己调用自己,这个函数就是递归函数
递归函数的作用和循环效果一样
由于递归很容易发生“栈溢出”错误(stack overflow),所以必须要加退出条件return。