js 函数作用域名

像c c++ c#的作用域是语句块,以{}大括号来区分的,而python和js是以函数来区分作用域的。

如:

================================ 1. 以函数作为作用域 (let除外)================================

其他语言: 以代码块作为作用域
public void Func(){
if(1==1){
string name = 'Java';

}
console.writeline(name);

}
Func()
// 报错

Python: 以函数作为作用域
情况一:
def func():
if 1==1:
name = 'alex'
print(name)

func()
// 成功
情况二:
def func():
if 1==1:
name = 'alex'
print(name)

func()
print(name)
// 报错

JavaScript: 以函数作为作用域

function func(){
if(1==1){
var name = 'alex';
}
console.log(name);
}
func()

================================ 2. 函数的作用域在函数未被调用之前,已经创建,即申明定义函数时创建作用范围 ================================

function func(){
if(1==1){
var name = 'alex';
}
console.log(name);
}

================= 3. 函数的作用域存在作用域链,并且也是在被调用之前创建。即嵌套函数中,越内层函数的变量越优先,依次向外层找,全局也找不到就报错 ==================
示例一:
xo = "alex";

function func(){
// var xo = 'eric';
function inner(){
// var xo = 'tony';
console.log(xo);
}

inner()
}

func()

示例二:
xo = "alex";

function func(){
var xo = 'eric';
function inner(){

console.log(xo);
}

return inner;
}

var ret = func()
ret()



示例三:
xo = "alex";

function func(){
var xo = 'eric';
function inner(){

console.log(xo);
}
var xo = 'tony';

return inner;
}

var ret = func()
ret()

================= 4. 函数内局部变量 声明提前 ==================

function func(){
console.log(xxoo);
}

func();
// 程序直接报错

function func(){
console.log(xxoo);
var xxoo = 'alex';
}
解释过程中:var xxoo;

func();
// undefined

猜你喜欢

转载自www.cnblogs.com/alex-hrg/p/9446282.html
今日推荐