JS基础学习-作用域
作用域
变量和函数的可被访问的范围
变量的作用域
全局变量
被定义在全局作用域的变量,在全局作用域中允许访问
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();