http://www.cnblogs.com/wupeiqi/p/5649402.html
五句话搞定JavaScript作用域
从JavaScript == pyhon 作用域几乎一致 __ 详解:
一、“JavaScript中无块级作用域”
在Java或C#中存在块级作用域,即:大括号也是一个作用域。
在python \ JavaScript语言中无块级作用域.
# 作用域# python 无块级别作用域。# java/c# 不可以生效。if 1==1: name=‘alex‘ print(name) #生效.alex for i in range(10): name=i print(name) #9 # python 以函数为作用域。def func(): name=‘alex‘ #name只在代码块中可以引用。func()print(name) #不能使用输出,报错。
二、python \JavaScript采用函数作用域
当执行console.log(xo)时,其寻找顺序为根据作用域链从内到外的优先级寻找,
如果内层没有就逐步向上找,直到没找到抛出异常。
四、python \JavaScript的作用域链执行前已创建
python 的作用域在被执行之前已经创建,日后再去执行时只需要按照作用域链去寻找即可。
# 作用域链# python 作用域在执行前已经确定好。在 所在的作用域,往上找
#例子1、name=‘alex‘def f1(): print(name)def f2(): name=‘eric‘ f1() f2()#执行结果:#alex
例子2、 #原理:但凡是用到了哪个函数,比如f1(),就会从f1()自己的函数往上找。跟你在函数执行放在哪里一点关系都没有。name=‘alex‘def f1(): #f1所在的作用域,往上找。 print(name) def f2(): name=‘eric‘ #内部作用域 return f1 ret =f2()# print(ret)ret() #结果# <function f1 at 0x0000026C7D81DF28># alex
新浪面试题:
# 例子3 进阶. li=[x+100 for x in range(10) if x >6 ]print(li) #执行结果:# [107, 108, 109] # 新浪面试题:# 以lambda 为元素的列表 li=[函数,函数,函数, ] li1=[lambda :x for x in range(4)] #li 列表中的元素,【函数,函数,函数】,li2=[lambda :1]li3=[x for x in range(10)]print(lambda :9) print(li1[0]) #生成一个函数名,并没有执行。 ret=li1[0]()print(ret) print(li2[0]()) print(li3) ###########print([lambda :9,][0]()) #根据内容——自己进行定义的lambda()执行函数。 #执行结果:# <function <listcomp>.<lambda> at 0x00000263D1CA80D0># 3# 1# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]# 9
时间: 2024-08-27 02:23:27