作用域

                变量和函数的可被访问的范围

    变量的作用域

         全局变量

被定义在全局作用域的变量,在全局作用域中允许访问

var str=’this is text’;

console.log(str);

定义函数

function fn(){

console.log(str);

};

fn();

         局部变量

被定义在函数作用域中的变量,只能在当前函数作用域中被访问

function fn(){

var str=’this is text’;

console.log(str);

};

fn();

在全局作用域(非函数作用域)中不能访问局部变量

在函数作用域中,定义局部变量时,不使用var关键字时会自动提升为全局变

         声明提前

全局变量声明提前

console.log(str);//输出undefined

*                            var str=’this is text’;

*                            等价于

*                            var str;

*                            console.log(str);//输出undefined

*                              str=’this is text’;

局部变量声明提前

function fn() {

console.log(str);//输出undefined

var str=’this is text’;

console.log(str);//输出this is text

};

         全局变量与局部变量重名时,在函数作用域中只访问到的是局部变量

         按值传递

函数的形参

函数体中改变的都是形参的值,与全局变量无关

var str=300;

function fn(str){

console.log(str);//300

str=str-10;

console.log(str);//290

}

函数的实参

对应全局变量

fn(str);

console.log(str);//300*/

参数与局部变量

函数的形参与局部变量的关系

function fn(num) {

//形参–利用形参初始化局部变量

console.log(num);//100

//定义局部变量,值为形参的值

var num=num;

//局部变量

console.log(num);//100

//局部变量

num=num-10;

//局部变量

console.log(num);//90

}

 

fn(100);

就近原则

//定义全局变量

var str=’this is text’;

 

function fn(){

console.log(str);//undefined

var str=’this is function’;//this is function

console.log(str);//1.全局变量;2.局部变量;3. 形参

 

}

fn();

     函数的作用域

         全局函数

被定义在全局作用域中的函数在全局作用域中允许访问

function fn() {

console.log(‘this is function’);//this is function

}

fn();

         内部函数

在函数作用域中定义函数–私有函数,在当前函数作用域中允许访问

在指定函数作用域外,不允许访问

function fn(){

function n(){

console.log(‘this is function’);

};

 

n();

};

fn();

    作用域链

var a=’a’;//全局变量

function fn() {

var b =’b’;//局部变量

function n() {// 内部函数

var c=’c’; //局部变量

function m() {//相对于n函数的内部函数

var d=’d’;

console .log(a,b,c,d);

}

m();

}

n();

}

fn();

打赏

发表评论

邮箱地址不会被公开。 必填项已用*标注