1、函数
1.1、定义函数
-
定义方式一:
- 一旦执行到return代表函数结束,返回结果
- 如果没有执行return,函数执行完也会返回结果,结果就是undefined
function abs(x){ if(x>=0){ return x; }else{ return -x; } }
-
定义方式二:
var abs = function(x){ if(x>=0){ return x; }else{ return -x; } }
1.2、调用函数
- 方法名();
- JavaScript可以传任意个参数,也可以不传递参数
- arguments:传递进来的所有参数,是一个数组。包含所有的参数,想要使用多余的参数,需要排除已有的参数。
- rest:获取已经定义的参数之外的所有参数。形参末尾添加 … rest。
2、变量的作用域
2.1、局部变量
-
在JavaScript中,var定义变量实际是有作用域的。假设在函数体中声明,则在函数体外不可以使用
function java(){ var x = 1; x = x+1; } x = x +2; //Uncaught ReferenceError: x is not defined
-
如果两个函数使用了相同的变量名,只要在函数内部,就不冲突
function java(){ var x = 1; x = x+1; } function java2(){ var x = 'csdn'; x = x+1; }
-
内部函数变量和外部函数的变量重名,就近原则
2.2、全局变量
-
全局变量
var x = 1; function java(){ console.log(x); } java(); console.log(x);
-
全局对象window,默认所有的全局变量,都会自动绑定在windows对象下。
var x = 1; function java(){ console.log(x); } java(); console.log(x); alert(window.x);
-
由于所有的全局变量都会绑定到window上,如果不同的js文件,使用了相同的全局变量,冲突——>减少冲突(把自己的代码全部放入自己定义的唯一空间名字中,降低全局命令冲突的问题)
//唯一全局变量 var javastudy = {}; //定义全局变量 javastudy.name='Java学不会'; javastudy.add = function (a,b){ return a+b; }
2.3、局部作用域 let
-
let关键字,解决局部作用域冲突问题。建议使用let定义局部变量
function a(){ for (let i = 1; i <100 ; i++) { console.log(i); } console.log(i+1); //index.html?_ijt=mttbuqilcfhg3gk3ec00j9uuvm:11 Uncaught ReferenceError: i is not defined } a();
2.4、常量 const
const PI = '3.14'; //常量
3、方法
-
方法就是把函数放在对象里面,对象只有两个东西:属性和方法
var javastudy = { name : 'Java学不会', birthday:'2002', age: function (){ // 今年 - 出生年 var now = new Date().getFullYear(); return now - this.birthday ; } }
-
apply
function getAge(){ // 今年 - 出生年 var now = new Date().getFullYear(); return now - this.birthday ; } getAge.apply(javastudy,[]); //this. 指向了javastudy,参数为空 var javastudy = { name : 'Java学不会', birthday:'2002', age: getAge }