http://www.cnblogs.com/wupeiqi/p/5649402.html   

五句话搞定JavaScript作用域


从JavaScript  == pyhon 作用域几乎一致 __ 详解:

一、“JavaScript中无块级作用域”

在Java或C#中存在块级作用域,即:大括号也是一个作用域。
    
在python \ JavaScript语言中无块级作用域.


  1. # 作用域
    # 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) #不能使用输出,报错。

  1.  
  1. 二、python \JavaScript采用函数作用域

    当执行console.log(xo)时,其寻找顺序为根据作用域链从内到外的优先级寻找,
    如果内层没有就逐步向上找,直到没找到抛出异常。



四、python \JavaScript的作用域链执行前已创建

python 的作用域在被执行之前已经创建,日后再去执行时只需要按照作用域链去寻找即可。

 

  1. # 作用域链
    # python
    作用域在执行前已经确定好。在 所在的作用域,往上找

  1. #例子1
    name='alex'
    def f1():
    print(name)
    def f2():
    name='eric'
    f1()

    f2()
    #执行结果:
    #alex

  1. 例子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

 

新浪面试题:


  1. # 例子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. 总结几个关于 jQuery 用法

    有关 jquery 用法 目录: $.trim() $.inArray() $.getJSON() 事件委托 on 遍历closest() ajaxSubmit() 拖拽排序 dragsort() 进 ...

  2. JQ Ajax 上传文件

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. npm中本地安装命令行类型的模块是不注册Path的

    http://www.jianshu.com/p/c04dea6e46de 首先有必要解释下什么是命令行(Command Line)类型的模块.npm的模块一共分为三类: 绑定型(Binding):本 ...

  4. CSS:层叠样式表的冲突处理

    前言 重叠样式表的冲突是通过重叠过程排序,最终确定文档的显示方式的,也就是是说通过重叠排序来处理冲突问题.这过程起决定性作用的是选择器及其相关申明的特殊性,以及继承机制. 基本流程 1.找出所有相关规 ...

  5. angularjs中的$destroy和$timeout

    module.controller("TestController", function($scope, $timeout) { var onTimeout = function( ...

  6. Spring Cloud Feign组件

    采用Spring Cloud微服务框架后,经常会涉及到服务间调用,服务间调用采用了Feign组件. 由于之前有使用dubbo经验.dubbo的负载均衡策略(轮训.最小连接数.随机轮训.加权轮训),du ...

  7. float元素一定要闭合

    float:left; float:right; 一定要两个元素一起放float

  8. 【转】Startssl SSL 证书申请图解

    一.什么是 SSL 证书,什么是 HTTPS 网站? SSL证书是数字证书的一种,类似于驾驶证.护照和营业执照的电子副本.SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(Secu ...

  9. 12.php中无比坑爹的构造函数。

    当你在php类中,写一个构造方法时,记得,一定要用__这是两个下划线,而不是一个.......... <?php class Car { // function _construct() { / ...

  10. openssl update--centos 6.5

    cd /usr/local/src #wget http://www.openssl.org/source/openssl-1.0.1h.tar.gz #tar -zxvf openssl-1.0.1 ...