一、全局变量和局部变量
全局变量:当前js页面中均可使用的变量【声明在函数外面的变量】,整个js页面中均可以使用。
局部变量:声明在函数内部的变量,只能在函数内部使用。
eg:
var a = 1; console.log(a); function test(){ console.log(a); //1 var b = 2 // c = 3; //c变量为全局变量,它的声明提前了【在页面的开始声明】 console.log(b); //2 } console.log(b); //错误提示:b is not defined
二、函数的使用
函数作为函数的参数使用:(可以作为回调函数使用)
eg:
function test(fun){ var msg = '我是test()函数中的变量msg'; fun(msg); } //函数test的调用 test(function(param){ console.log(param); //输出:我是test()函数中的变量msg });
函数作为返回结果来使用:
eg:
function test(){ return function(){ console.log('我是test()函数的返回函数中的输出语句'); }; } //函数test的调用 test(); //test();的返回值为:function(){console.log('我是test()函数的返回函数中的输出语句');} test()(); //输出:我是test()函数的返回函数中的输出语句
三、值传递与地址传递【简单叙述一下】
a.变量是通过值传递的。后面变量值改变不影响前面变量的值【相当于值的复制】
b.对象是通过地址传递的。赋值时使用的是指向该对象的指针地址,获得该指针地址的变量改变
对象属性值,其他拥有相同指针地址的变量指向的堆空间属性值也相应更新改变,所以其前面对象相应的属性值会发生改变。
四、闭包
//闭包 是函数访问上下文中的变量 var arr = []; for(var i=0;i<5;i++){ /* //这样的代码会有闭包现象 arr[i] = function(){ console.log(i); }; */ //解决闭包问题,使用立即执行函数来动态获得相应参数i的值 arr[i] = (function(num){ return function(){ console.log(num); }; })(i); } console.log(arr); //Array(5) [i(),i(),i(),i(),i()] arr[0](); //0 arr[1](); //1 arr[2](); //2