函数
一,函数的定义
绝对值函数:
方式一:
function abs(x){
if(x>=0){
return x;
}else{
return -x;
}
}
一旦执行到return代表函数结束,返回结果!如果没有执行return,函数执行完也会返回结果,结果就是NaN
方式二:
var abs=function(x){
if(x>=0){
return x;
}else{
return -x;
}
}
function(x){....}是一个匿名函数,但是可以把结果赋值给abs,通过abs就可以调用函数
方式一和方式二等价
调用函数:
abs(-10) //10
参数问题:
JavaScript可以传任意个参数,也可以不传递参数
arguments是js免费赠送的关键字,代表传递进来的所有参数, 是一个数组
===========
可以看到,真正用到的参数是第一个12,后面的所有参数都打印了一遍,如果我们想使用后面的参数就要加判断条件
ES6新特性里引入了rest关键字,用法如下:
========================================================
可以看到,除了使用的a,b,rest表示其他未使用的参数数组,打印出来,而argumens是打印所有的参数。
rest参数只能写在最后面,必须用...标识。
二,变量的作用域
在JavaScript中,var定义变量实际是有作用域的
假设在函数体中声明,则在函数外不可以使用(可用闭包实现)
如果两个函数使用了相同的变量名,只要在函数内部,就不冲突
内部函数可以访问外部函数,反之不行
提升变量作用域
等价于
结果为
说明JavaScript执行引擎自动提升了y的声明,但没有提升y的赋值,养成规范,所有变量定义都写在函数头部
全局函数
全局对象window
默认所有的全局变量,都会自动绑定在window对象
JavaScript实际上只有一个全局作用域,任何变量(函数也可以视为变量),假设没有在函数作用范围内找到,就会向外查找,如果在全局作用域没有找到,则会报错。
由于我们所有的全局变量都会绑定到我们的window上,如果不同js文件,使用了相同的全局变量,就会冲突
把自己的代码全部放入自己定义的唯一空间名字中,降低命名冲突问题
局部作用域let
这里用var定义i,在出了循环,i还会输出101,但是用let,除了循环,就会报错
建议使用let去定义局部作用域变量
常量const
在ES6之前,这么定义常量:
只要用全部大写字母的变量就是常量,建议不要修改
在ES6引入常量关键字:const,是不可修改的
三,方法
定义方法:
======调用
如果我们拆开写:
==========调用,一个是直接调用age,一个是直接掉用getAge
因为this关键字在对象中是指的对象,,所以有birth属性,但是在对象外面,this指的是如上所说的window,window里面没有birth所以失效
apply()
在java中this是无法指向的 ,默认指向调用它的对象,但是在js中可以控制this指向
================
将this指向person