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
























最新文章

  1. 三种POST和GET的提交方式
  2. Kanzi编程基础2 - Kanzi节点读取和属性设置
  3. python-etcd
  4. NYOJ 16 矩形嵌套(经典动态规划)
  5. 如何垂直居中一个&lt;img&gt;?
  6. pci
  7. 1057. Stack (30)
  8. iOSQuartz2D-03-定制个性头像
  9. memcached客户端的使用
  10. 不同的source control下配置DiffMerge
  11. 虚拟机下ubuntu的minicom使用指南
  12. javascript每日一练(七)——事件二:键盘事件
  13. Python内置函数(9)——int
  14. JMM(java Memory Model)到底是什么?
  15. java多线程快速入门(十八)
  16. js 图片转换base64 base64转换为file对象
  17. 【C++ 实验5 类和对象】
  18. UI常用接口使用规范
  19. 了解数据模型、以及MySQL使用的数据模型
  20. 关于dubbo通信协议之对比

热门文章

  1. springmvc中配置servlet初始化类
  2. GraphicsMagick +im4java高并发处理大型网站图片工具-图片剪切、遮蔽、水印添加之环境搭建
  3. java 获取用户真实ip
  4. linux 下启动SVN服务
  5. 浅谈SRAM与DRAM的异同
  6. Python中如何将字符串作为变量名
  7. windows下GVIM的配置(vimrc)
  8. oracle+SQL优化实例
  9. GZipStream
  10. 时间戳(Unix时间)