作用域,顾名思义就是作用范围,也被称为生存范围或者说存在的范围;
在函数内部声明的变量只能影响到变量所在函数体本身,无法从外部对函数内部的变量进行调用,被称为‘函数作用域’
var a = "world"
function s(){
console.log("hello"+a)
}
//输出 “hello world”
以上demo我在函数外部声明了一个变量a并对其进行了赋值,在函数内部函数也调用到了全局属性 a的值。
function text(){
var a = "你怎么穿着品如的衣服,还用他的东西?"
}
console.log(a)
//a is not defined 结果出现了报错
我在函数内部声明了一个变量a,并且在函数外面对变量a进行了调用,结果出现了报错
demo:
var a = "你怎么,穿着品如的衣服?"
function text(){
var a = "你是说我骚么?"
console.log(a) //你是说我骚么?
}
text();//你是说我骚么?
console.log(a)//你怎么,穿着品如的衣服?
在上面的demo中我在函数外面声明了一个变量,同时在函数里面声明了一个变量,结果调用函数的结果出来的是函数里面的变量,而在函数外面调用了一个变量结果是调用了全局变量。所以函数外面的变量与函数里面的变量发生冲突时,函数作用域大于全局作用域,可见函数作用域只作用于函数本身,出了函数体,变量又会恢复过来。
与全局作用域一样,函数内部的变量也会产生‘变量提升’现象,特性和全局变量一样,只不过函数内部的局部变量提升的是到当前函数体的最上方,而全局变量提升到当前代码块的最上方。
function text(){
var a = "我喜欢品如";
console.log(a+b); //
var b = "因为她够骚.";
console.log(a +b)
}
text()//输出的为 我喜欢品如undefined和我喜欢品品如,因为她够骚。
demo:
function text(){
var a
var b
a = “我喜欢品如”
console.log(a+b)
b = "因为她够骚";
}
var a = 1
var b =function(){
console.log(a);//函数输出是1
}
function f(){
var a = 2;
b();//直接把b整个代码搬过来
}
f()//输出函数结果仍是1
原文:https://www.cnblogs.com/wangjiahui/p/10836236.html