重温javascript 基础【四】

139 阅读3分钟
               //=======================函数========================
	//函数就是封装了一段可以被重复使用的代码块,目的让大量代码重复使用
	//函数使用分为两部 1 声明函数 2 调用函数
	// function getSum(num1,num2){     //形参  形参是接受实参的
	// 	var sum=0;
	// 	for(var i=num1;i<=num2;i++){
	// 		sum+=i
	// 	}
	// 	console.log(sum)
	// }
	// getSum(1,1000)  //实参 /如果实参个数多余形参 会根据形参个数来运算/如果实参个数小于形参 多余的形参定义为undefiend 结果NAN
	//===================返回值return==========
	//函数遇到return 就把结果返回给函数的调用者    return 后面的代码不会执行 终止函数
	// function getSum(num1,num2){ 
	// 	var sum=0;
	// 	for(var i=num1;i<=num2;i++){
	// 		sum+=i
	// 	}
	// 	return sum
	// }
	// console.log(getSum(1,1000) );
	
	//练习取出任意两数最大值
	// function getMax(num1,num2){
	// 	// if(num1>num2){
	// 	// 	return num1
	// 	// }else{
	// 	// 	return num2
	// 	// }
	// 	return num1>num2 ? num1 : num2    //三元运算符
	// }
	// console.log(getMax(8,5));
	
	//练习利用函数求任意数组中的最大数值
	// function getArr(arr){
	// 	var max = arr[0]
	// 	for(var i = 1;i<arr.length;i++){
	// 		if(arr[i]>max){
	// 			max=arr[i]
	// 		}
	// 	}
	// 	return max
	// }
	// var re = getArr([4,7,1,4,9,23,55,28])
	// console.log(re);
	
	// var num1=prompt('输入数字');
	// var num2=prompt('输入数字')
	// function getNum(num1,num2){
	// 	return num1>num2 ? num1:num2
	// }
	// alert(getNum(num1,num2));
	//=============arguments的使用==============
	//Arguments是以伪数组的形式存储实参
	// function getMax(){
	// 	var max = arguments[0]
	// 	for(var i =1;i<arguments.length;i++){
	// 		if(arguments[i]>max){
	// 			max=arguments[i]
	// 		}
	// 	}
	// 	return max
	// }
	// console.log(getMax(1,2,7,3,5,9))
	
	//利用函数封装冒泡排序
	// function sort(arr){
	// 	for(var i = 0 ;i<arr.length-1;i++){
	// 		for(var j = 0;j<arr.length-i-1;j++){
	// 			if(arr[j]<arr[j+1]){
	// 				var temp = arr[j]
	// 				arr[j]=arr[j+1]
	// 				arr[j+1]=temp
	// 			}
	// 		}
	// 	}
	// 	return arr
	// }
	// 	var arr1= sort([1,3,5,7,9])
	// 	console.log(arr1);
	
	//=====================函数可以相互调用======================
	// function fn1(){
	// 	console.log(111)   //1
	// 	fn2()
	// 	console.log('fn1')  //4
	// }
	// function fn2(){
	// 	console.log(222)   //2
	// 	console.log('fn2') //3
	// }
	// fn1()
	
	//===============javascript作用域===============
	//就是代码名字(变量)在某个范围内起作用 提高程序可靠性
	//全局作用域  /局部作用域
	//全局作用域 整个script标签 或则单独JS文件 比如在里面写 var num = 10  这是全局作用域
	//局部作用域 在函数内部 就是局部作用域 代码名字只在函数内部起作用 比如 function fn(){var num = 20 局部作用域}
		// var num =10   //全局
		// console.log(num);
		// function fn(){
		// 	 var num = 20  //局部
		// 	 console.log(num);
		// 	}
		// 	 fn()
	//全局变量/ 关闭浏览器才会销毁 占内存
	// var num = 10 //全局变量
	// console.log(num);
	// function fn(){
	// 	console.log(num)  //函数内部可以使用全局变量  
	// }
	// fn()
	// 局部变量   程序结束就会销毁 节约资源
	// function fun(){
	// 	var num1 = 10   //这就是局部变量 只能在内部使用 在外部打印报错
	// 	num2=20     //没有声明的直接赋值的变量也属于全局变量 可打印20
	// }
	// fun()
	// console.log(num1); //报错
	// console.log(num2)  //20
	
	//==============块级作用域========================
	//块级作用域{} es6再写这个
	
	//=================作用域链=========================
	//内部函数访问外部函数的变量,采用链式查找方式来决定取哪个值 成为作用域链 就近原则
	// var num = 10;
	// function fn(){
	// 	var num = 20;
	// 	function fun(){
	// 		console.log(num);  //20
	// 	}
	// 	fun()
	// }
	// fn()
	
	//=========================预解析==========================
	//JS解释器运行分为两步 预解析  代码执行 
	 //1/预解析 JS解释器会把所有的var 还有 function提升到作用域的最前面
	 //2/代码执行 按照代码书写顺序从上往下执行
	//预解析分为 变量预解析(变量提升) 和 函数预解析(函数提升)
	 //1/变量提升 就是把所有的变量声明提升到当前的作用域最前面 不提升赋值操作
	 //2/函数提升 就是把所有函数声明提升到当前作用域前 不调用函数
	// var num = 10;
	// fun();
	// function fun(){
	// 	console.log(num);
	// 	var num =20
	// }