JS基础学习04

函数常见错误

1.函数外的变量与函数内的同名形参不是同一变量
2.函数内部可以调用其他的函数(包括自身)

arguments伪数组

当不确定用户是否传入了参数,或不知道用户传入了多少参数。
使用arguments对象可以获取传入的每个参数的值
	function f1(){
		var sum = 0;
		for(var i=0;i<arguments.length;i++){
			sum+=arguments[i];
		}
		return sum;
	}
	console.log(f1(10,20,30));

函数的其它定义方式

1.命名函数 ----函数有名字
	函数定义:
		function 函数名(){
			函数体
		}
2.匿名函数 ----函数没有名字
	函数的另一种定义方式 ---函数表达式(把一个函数给一个变量)
	函数表达式后要加 ” ;“
		var f = function(){
			函数体
		};
		f();	//调用
命名函数-函数定义若出现重名,则不管在哪调用 后一个函数会覆盖掉前面的重名函数
匿名函数-函数表达式若出现重名,若在后一个函数表达式定义前调用前一个函数则不会被覆盖,类似于变量的特性
2.2 匿名函数--另一种函数调用--函数的自调用
	一次性的-----安全,不会出现冲突
	(function (){
		console.log("hello,world!")
	};)();

函数作为参数使用

如果一个函数作为参数,那么这个参数(函数)叫回调函数
function f1(fn){
	fn();
}
function f2(){
	console.log("abcd");
}
f1(f2);

函数作为返回值使用

function f1(){
	console.log("f1函数被调用了");
	return function(){
		console.log("这是一个函数");
	};
}
var ff = f1();	//此时ff成为一个函数
ff();

作用域

全局变量:使用var声明的非在函数内声明的变量
	全局变量若页面不关闭,则不会释放,会占据空间,消耗内存,不可被删除
局部变量:函数内部定义的变量,只能在该函数内使用
隐式全局变量:声明的变量没用var,可以被删除!!
全局作用域:全局变量的使用范围
局部作用域:局部变量的使用范围
块级作用域:一对大括号可以看成一块,其中的变量只能在该区域使用
	JS没有块级作用域,只有函数除外

写代码要注意变量的声明位置及使用问题

作用域链

var num = 0;
function f1(){
	var num = 10;
	function f2(){
		var num = 20;
		function f3(){
			var num = 30;
			console.log(num);
		}
		f3();
	}
	f2();
}
f1();
函数就近使用同名函数变量,最近变量作用域变量

预解析

预解析会分段,各个script标签内的预解析不会相互影响

定义: 提前解析–代码中的变量声明,函数声明
提前至当前作用域的最上面
函数中的变量声明会提升至函数作用域最上方,不会出函数

console.log(num);	//输出结果为undefined 
var num = 10;		//变量的声明提前了

预解析案例

1.
	f1();			//不能调用
	var f1 = function(){
		console.log(a);			//undefined
		var a = 10;
	};
2. 
	f2();		//undefined-可以调用
	function f2(){
		console.log(a);		//undefined
		var a = 10;
	}

猜你喜欢

转载自blog.csdn.net/weixin_42966943/article/details/87937604