函数调用问题:
例: function printNum( ){
console.log(1)
}
printNum(); ------>只是调用函数;
console.log(printNum( )); ---------->
1.调用函数
2.把printNum()当成一个值来输出,return后的值
一般情况: 没有return,直接调用,有return,需要输出调用;
函数参数的个数问题:
1.形参个数=实参个数:一一对应
2.形参个数>实参个数:一一对应,多余的形参接收的是undefined
3.形参个数<实参个数:
任何函数内部都有一个arguments东西,它代表全部实参!!
--------------------------------------------------------------------------------------------------------------------------------
作用域:
一段代码生效的范围;
1.全局作用域:
1.1 位置:变量定义在script标签内,函数外部的区域,具有全局作用域,拥有全局作用域的变量可以在任何地方访问到;
1.2 生命周期: 打开一个页面就形参了一个全局作用域,页面关闭,全局作用域就销毁(抽象的概念);
1.3 注意: 全局作用域中有一个叫window的对象,可以直接访问的;
2.局部作用域(函数作用域):
2.1 位置: 定义在函数内部,拥有局部作用域,变量只能函数内部访问,函数外部访问不到;
2.2 生命周期: 局部作用域在函数调用时产生,函数调用结束销毁;
2.3 注意: 只有定义在函数内部的变量拥有局部作用域,在if(){}或者for(){}没有局部作用域;
变量的访问规则:
先访问当前作用域下有没有定义变量,没有的话向上查找;
变量的赋值规则:
先访问当前作用域下有没有定义变量,有的话,就给当前作用域的变量赋值,没有的话,向上查找;
预解析:
提前解释代码;
浏览器内核: 渲染引擎(解释html和css)和js引擎(解释性语言,从上向下一行一行解释说明)
js引擎在执行js代码的时候,把var和function提升到当前作用域的最顶端;
变量提升的只是声明部分;
函数提升(提升的声明式===》function fn(){}),提升函数整体;
函数提升优先于变量提升!!!
递归:
在函数内部直接或者间接的调用函数本身;
递归需要有出口,没有出口就形式死递归(Maximum call stack size exceeded :栈溢出);
终止函数: return;
终止循环: break;
例:===========递归算5的阶乘==============
function getji(n) {
var ji;
if(n==1){
ji=1;
}else{
ji=n*getji(n-1);
}
return ji;
}
alert('5!结果为:'+getji(5));
=========================================