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. C++ 类的继承六(多继承的二义性--虚基类)

    //多继承的二义性--虚基类(了解为主) #include<iostream> using namespace std; /* 多继承在现在的项目开发中一般不使用,他会增加项目的复杂度 * ...

  2. CVPR(IEEE Conference on Computer Vision and Pattern Recognition)

    论文提交时间:11月份中旬左右会议时间:7月份左右 CVPR 2017: 网址:http://cvpr2017.thecvf.com/ 接受论文数:782

  3. 第二百四十节,Bootstrap巨幕页头缩略图和警告框组件

    Bootstrap巨幕页头缩略图和警告框组件 学习要点: 1.巨幕组件 2.页头组件 3.缩略图组件 4.警告框组件 本节课我们主要学习一下 Bootstrap 的四个组件功能:巨幕组件.页头组件.缩 ...

  4. 日历类Calendar

    在早期的JDK版本中,日期(Date)类附有两大功能:(1)允许用年.月.日.时.分.秒来解释日期:(2)允许对表示日期的字符串进行格式化和句法分析.在JDK1.1中提供了类Calendar来完成第一 ...

  5. mac 干掉Dashboard

    打开终端,输入下面的命令: defaults write com.apple.dashboard mcx-disabled -boolean YES   然后再重启一下 Dock,在终端输入 kill ...

  6. WPF 附加属性的用法 (一)

    public class MDCTest { public static DependencyProperty MouseDoubleClickCommandProperty = Dependency ...

  7. Android 实现个性的ViewPager切换动画 实战PageTransformer(兼容Android3.0下面)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40411921.本文出自:[张鸿洋的博客] 1.概述 之前写过一篇博文:Andro ...

  8. Windows 10 上安装 3D Studio Max 2016 报错的解决办法

    在 Windows 10 上安装 3D Stuido Max 2016 报错,无法正常安装,查看日志是 VC 运行时安装错误,经过分析发现在 Windows 10 上已经有这些运行时并且版本比安装包中 ...

  9. Python创建数组

    1  创建数组 array函数 >>> a=([1,2],[3,4]) >>> array(a) array([[1, 2], [3, 4]]) arange函数: ...

  10. 【BZOJ2653】middle 二分+可持久化线段树

    [BZOJ2653]middle Description 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整.给你一个 长度为n的序列s.回答Q个 ...