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
























小知识:pyhon的作用域的更多相关文章

  1. s性能优化方面的小知识

    总结的js性能优化方面的小知识 前言 一直在学习javascript,也有看过<犀利开发Jquery内核详解与实践>,对这本书的评价只有两个字犀利,可能是对javascript理解的还不够 ...

  2. JS的基本类型(小知识)

    一:js中的基本类型: 基本类型:boolen, string ,number,null,undefined 引用类型:object,和函数 二.undedifned和null的区别: 1 undef ...

  3. js中级小知识1

    首先我们复习之前的小知识,本期博客与之前有关 js数据类型 基本数据类型:string    undefined         null         boolean          numbe ...

  4. 【C#小知识】C#中一些易混淆概念总结(三)---------结构,GC,静态成员,静态类

    目录: [C#小知识]C#中一些易混淆概念总结 [C#小知识]C#中一些易混淆概念总结(二) ---------------------------------------分割线----------- ...

  5. es6 一些小知识

    本人最近被es6感兴趣了,学习一些,以下就是自己总结的一些小知识 1.当你在百度输入"es6"关键字,点击进入es6入门,首先你需要知道怎样学习的顺序,先看第21章Module语法 ...

  6. 蓝牙Bluetooth技术小知识

    蓝牙Bluetooth技术以及广泛的应用于各种设备,并将继续在物联网IoT领域担任重要角色.下面搜集整理了一些关于蓝牙技术的小知识,以备参考. 蓝牙Bluetooth技术始创于1994年,其名字来源于 ...

  7. HTML+CSS中的一些小知识

    今天分享一些HTML.CSS的小知识,希望能够对大家有所帮助! 1.解决网页乱码的问题:最重要的是要保证各个环节的字符编码一致! (1)编辑器的编辑环境的字符集(默认字符集):Crtl+U 常见的编码 ...

  8. iOS APP开发的小知识(分享)

          亿合科技小编发现从2007年第一款智能手机横空出世,由此开启了人们的移动智能时代.我们从一开始对APP的陌生,到现在的爱不释手,可见APP开发的出现对我们的生活改变有多巨大.而iOS AP ...

  9. Unix系统小知识(转)

    Unix操作系统的小知识 2.VI添加行号/翻页/清屏 .在对话模式时(即输完Esc再输入: ),输入“:set number”可以将编辑的文本加上行号.跟玩俄罗斯方块一样方便的上下左右移动箭头的快捷 ...

  10. salesforce 零基础开发入门学习(十)IDE便捷小知识

    在这里介绍两个IDE的便捷开发的小知识. 一) 本地调试 由于salesforce代码只能提交以后才能调试,所以很多时候调试代码很麻烦.新版增加了一个特性:即可以在本地调试相关的代码或者查看相关代码运 ...

随机推荐

  1. android studio 中配置androidAnnotation 的新版正确配置

    apply ].processResources.manifestFile resourcePackageName 'com.peiandsky.firstandroidstudio' }}

  2. Docker是用来干什么的?【快速入门】

    Docker从去年开始不仅能在Linux下运行 ,还支持windows.osX等主流系统. 下面的例子我自己经常使用,当然你有更好的案例也可以分享给我. 尝试新软件 对开发者而言,每天会催生出的各式各 ...

  3. windows下使用c++调用redis

    不废话,unix下c++调用 redis可以看这个: http://blog.csdn.net/youngqj/article/details/8266177 ==================== ...

  4. net 代码生成

    http://blog.csdn.net/tcjiaan/article/details/7764858

  5. char类型能否存储一个中文字符?为什么

    char类型能否存储一个中文字符?为什么 解答:可以.一个char是两个字节,而一个中文也是两个字节.

  6. java web 登录框

    我们会骂 12306 的网站界面挫,效果差,速度慢,回头看看自己写的代码,是不是也一样的狗血!在前端,很多看似简单的东西,内藏无数玄机.本文将以一个小小的登录框为入口,谈一谈如何完善自己的程序. 在很 ...

  7. CentOS 同步时间

    来源:http://www.ctusky.com/16/0497/ 用date查看系统当前时间,date -R 可查看时区. CentOS 同步时间由ntp服务提供,可以用"yum inst ...

  8. (转)使用 PyInstaller 把python程序 .py转为 .exe 可执行程序

    最近使用Python为项目开发一款绘图工具(绘出 声场三维模型).因为希望能把Python脚本发布为脱离Python平台运行的可执行程序,比如单个的exe文件.PyInstaller恰满足这个需求.本 ...

  9. jQery 操作CSS

    jQuery操作CSS也是很方便的,咱先看看这几个常用的方法: addClass():向一个元素添加一个或者多个类. removeClass():从一个元素中删除一个类或多个类. toggleClas ...

  10. SQL Server数据库实例名与服务器名不一致的解决办法

    SQL Server数据库实例名与服务器名不一致的解决办法 --EXEC sp_addlinkedserver --   @server = 'PSHGQ' --GO --select * from  ...