定义函数
定义方式一
绝对值函数
一旦执行到return代表函数结束,返回结果!
如果没有执行return,函数执行完也会返回结果,结果就是undefined
定义方式二
function(x){…}这是一个匿名函数。但是可以吧结果赋值给abs,通过abs就可以调用函数!
方式一和方式二等价!
调用函数
abs(10)//10
abs(-10) //10
参数问题:javaScript可以传任意个参数,也可以不传递参数~
参数进来是否存在问题?
假设不存在参数,如何规避?
获取函数的所有参数
arguments关键字
arguments是一个JS免费赠送的关键字; 代表,传递进来的所有参数,arguments是一个包含所有参数的数组!
问题:arguments包含所有的参数,我们有时候想使用多余的参数来进行附加操作。需要排除已有参数~
rest关键字,获取除了定义了的参数之外的其他所有多余的参数
…rest,相当于java中的可变长参数
以前:
ES6引入的新特性,获取除了已经定义的参数之外的所有参数~…
rest参数只能写在最后面,必须用…标识。
变量的作用域
在javascript中,var定义变量实际是有作用于的。
假设在函数体重声明,则在函数体外不可以使用~(闭包)
如果两个函数使用了相同的变量名,只要在函数内部就不冲突
内部函数可以访问外部函数的成员,反之则不行
假设,内部函数变量和外部函数变量,重名!都可以用,在内部调用内部的变量,在外部则调用外部的变量
假设在JavaScript中,函数查找变量从自身函数开始~, 由“内”向“外”查找,假设外部存在这个同名的函数变量,则内部函数会屏蔽外部函数的变量。
提升变量的作用域
结果:x undefined
说明:js执行引擎,自动提升了y的声明,但是不会提升变量y的赋值;
这个是在javascript建立之初就存在的特性。 养成规范:所有 的变量定义都放在函数的头部,不要乱放,便于代码维护;
全局变量
全局对象window
alert() 这个函数本身也是一个window的变量;
javascript实际上只有一个全局作用域window,任何变量(函数也可以视为变量),假设没有在函数作用范围内找到,就会向外查找,如果在全局作用域window都没有找到,就会报错 RefrenceError
规范
由于我们的所有全局变量都会绑定到window上。如果不同的js文件,使用了相同的全局变量,就会产生冲突—>如何减少这样的冲突?
定义唯一全局变量,将其他变量放入唯一全局变量中
把自己的代码全部放入自己定义的唯一空间名字中,降低全局命名冲突问题~
jQuery中就是使用的该方法:jQuery.name,简便写法:$()
局部作用域 let
问题:var i 在作用域外面居然还能用
ES6的let关键字,解决了局部作用域冲突的问题!
建议大家都用let去定义局部作用域的变量;
常量
在ES6之前,怎么定义常量:只有用全部大写字母命名的变量就是常量;建议不要修改这样的值。
在ES6引入了常量关键字 const
方法
定义方法
方法就是把函数放在对象的里面,对象只有两个东西:属性和方法
this.代表什么?拆开上面的代码看看
this是无法指向的,是默认指向调用它的那个对象的;
apply
在js中可以控制this指向,this指向了kuang,参数为空
function getAge() {
now = new Date().getFullYear();
return now-this.birth;
}
var kuang = {
name : "hhb",
birth : 2000,
age : getAge
};
var huang = {
name : "huang",
birth : 1990,
age : getAge
}
getAge.apply(kuang,[]);//this指向了kuang,参数为空