第4天
函数
就是一段高度复用的代码段。
函数的引用
就是直接使用函数名输出的是函数的函数体;
任何数字加undefined为NaN
function add(){
}
如果只写函数,该表达式并不会调用函数体内部所有的代码,该表达式的返回值不取决与函数体内部的return语句,而一律返回函数自身的函数的引用。
- 匿名函数:没有名字的函数,可以将匿名函数赋值给一个变量然后才可以被使用的函数。
var fn=function(num1,num2){
return num1+num2;
}
console.log(fn())
-
IIFE函数的写法—自调用函数------------???
//写法一: (function(num1,num2){ alert(num1+num2) })(1,5)
//写法二: var a=(function(num1,num2){ return num1+num2 })(1,5) console.log(a);//6
变量作用域
在任何情况下,访问一个被声明的变量程序都会报错。
- 全局变量:在函数体外面声明的变量;特点:在任何地方都可以被访问。
- 局部变量:在函数体内部声明的变量就叫局部变量;特点:只能在该函数内层作用域下才可以北方问道。
在局部变量和全局变量发生冲突的‘时候规则为 :以局部变量为准;
在函数体内部声明全局变量的方式:
function fu(){
//变量a就是全局变量
//此种方式是在函数中声明一个全局变量
a=5;
}
fu();
变量提升:js解释器的一种机制
js在调用某个函数的时候会将该函数中所有的局部变量并进行局部变量放置在函数体顶端,先声明再赋值
变量提升不一定都是再函数中的;
function fn(){
console.log(a);
var a=5;
}
fn();
相当于以下代码:
function fn(){
var a;
console.log(a);//此时输出的时候控制台输出:undefined;因为此时a没有被赋值
console.log(b)://此时会报错,因为b是全局变量,不参与变量提升。
a=5;
b=10;
}
fn();
const 和let声明变量的时候不会产生变量提升;
全局作用域也会参与变量提升操作;
三个数字比较大小
function compare(a,b,c){
var t;
if(a<b){
t=a;
a=b;
b=a
}
if(a<c){
t=a;
a=c;
c=t;
}
if(b<c){
t=b;
b=c;
c=t;
}
console.log(a+">"+b+">"+c)
}
compare(2,3,1);
compare(2,4,5);//此处为调用的方式;
*注意:此处在比较的时候先使用a和其他的两个数字进行对比*