作用域

两周自制脚本语言-第7天 添加函数功能

[亡魂溺海] 提交于 2020-01-19 23:30:39
第7天 添加函数功能 基本的函数定义与调用执行、引入闭包使Stone语言可以将变量赋值为函数,或将函数作为参数传递给其他函数 有些函数将有返回值的归为函数,没有返回值的归为子程序 7.1 扩充语法规则 函数定义语句的语法规则 此书将函数定义语句称为def语句。def语句仅能用于最外层代码,用户无法在代码块中定义函数 Stone语言将最后执行语句(表达式)的计算结果将作为函数的返回值返回 代码清单 7.1 与函数相关的语法规则 param : IDENTIFIER params : param { "," param } param_list : "(" [ params ] ")" def : "def" IDENTIFIER param_list block args : expr { "," expr } postfix : "(" [ args ] ")" primary : ( "(" expr ")" | NUMBER | IDENTIFIER | STRING ) { postfix } simple : expr [ args ] program : [ def | statement ] (";" | EOL) 形参param是一种标识符(变量名)。形参序列params至少包含一个param,各个参数之间通过逗号分隔。 param

深入js——作用域链

旧巷老猫 提交于 2020-01-19 11:38:04
作用域 作用域是可访问对象的集合,确定当前执行代码对变量的访问权限。 作用域可分为静态作用域和动态作用域,JavaScript采用静态作用域,也叫词法作用域。 静态作用域 函数的作用域 在函数定义的时候 就决定了,与函数如何被调用,在何处被调用无关。 var a = 1; function foo() { console.log(a); // 1 } function bar () { var a = 2; foo() } bar() 以上代码,foo函数为打印出1。虽然foo是在bar函数中执行,但它的作用域是在它定义时就确定了。首先查找foo内部有没有a,没有就从外层找a,于是最终打印出了1。 [[scope]] 在将作用域链之前,先讲讲[[scope]]。用console.dir随便打印一个函数 function bar () { var a = 1; function foo () { console.log(a) } console.dir(foo) } console.dir(bar) bar() 可以看到有一个[[scope]]属性。从这个例子可以看出: [[scope]]是所有父变量对象的层级链 [[scope]]在函数创建时被存储--静态(不变的),永远永远,直至函数销毁。即:函数可以永不调用,但[[scope]]属性已经写入,并存储在函数对象中。 Q

java内存划分为5个部分

两盒软妹~` 提交于 2020-01-19 09:14:09
Java的内存需要划分成为5个部分: 1.栈(Stack) : 存放的都是方法中的局部变量。 方法的运行一定要在栈当中运行。 局部变量:方法的参数,或者是方法{}内部的变量 作用域:一旦超出作用域,立刻从栈内存当中消失。 2.堆(Heap) : 凡是new出来的东西,都在堆当中。 堆内存里面的东西都有一个地址值: 16进制 堆内存里面的数据,都有默认值。规则: 如果是整数 默认为0 如果是浮点数 默认为0.0 如果是字符 默认为"\u0000' 如果是布尔 默认为false 如果是引用类型 默认为null 3.方法区(Method Area) : 存储.class相关信息,包含方法的信息。 4.本地方法栈(Native Method Stack) : 与操作系统相关。 5.寄存器(pc Register) : 与CPU相关。 来源: CSDN 作者: young_change 链接: https://blog.csdn.net/young_changge/article/details/103843336

JS初级-作用域

不问归期 提交于 2020-01-19 08:06:44
作用域: 域:空间、范围、区域…… 作用:读、写 script 全局变量、全局函数 自上而下 函数 由里到外 {} 浏览器: “JS解析器” 1)“找一些东西” :var function 参数 a = ... 所有的变量,在正式运行代码之前,都提前赋了一个值:未定义 fn1 = function fn1(){ alert(2); } 所有的函数,在正式运行代码之前,都是整个函数块 JS 的预解析 遇到重名的:只留一个 变量和函数重名了,就只留下函数 2)逐行解读代码: 表达式:= + - * / % ++ -- ! 参数…… 表达式可以修改预解析的值! 下面看一个小例子: alert(a); // function a (){ alert(4); } var a = 1; alert(a); // 1 function a (){ alert(2); } alert(a); // 1 var a = 3; alert(a); // 3 function a (){ alert(4); } alert(a); // 3 alert( typeof a ); 全局与局部的问题: var a = 1; function fn1(a){ alert(a); // undefined a = 2; } fn1(); alert(a); // 1 var a = 1; function

函数执行时的作用域链和活动对象是怎么形成的及与闭包的关系

ⅰ亾dé卋堺 提交于 2020-01-19 05:58:59
函数执行时的作用域链和活动对象是如何形成的及与闭包的关系 1、javascript解析器启动时就会初始化建立一个全局对象global object,这个全局对象就 拥有了一些预定义的全局变量和全局方法,如Infinity, parseInt, Math,所有程序中定义的全局变量都是这个全局对象的属性。在客户端javascript中,Window就是这个javascript的全局对象。 2、当javascript执行一个function时,会生成一个对象,称之为call object,function中的局部变量和function的参数都成为这个call object的属性,以免覆写同名的全局变量。 3、javascript解析器每次执行function时,都会为此function创建一个execution context执行环境,在此function执行环境中最重要的一点就是function的作用域链scope chain,这是一个对象链,由全局对象和活动对象构成,对象链具体构成过程见下面说明。 4、标识的查找机制:当javascript查询变量x的值时,就会检查此作用域链中第一个对象,可能是function的call object或全局对象(比如window),如果对象中有定义此x属性,则返回值,不然检查作用域链中的下一个对象是否定义x属性,在作用域链中没有找到

Day3-函数及作用域

旧城冷巷雨未停 提交于 2020-01-19 04:06:07
一、函数定义: 一组代码片段用函数名封装起来,通过函数名的方式调用执行。 特性: 1.减少重复代码 2.使程序易扩展 3.使程序易维护 语法定义: 1 def sayhi(): 2 print("hello,I'am function") 3 sayhi() 带参数的函数名: 1 def calc(x,y): 2 res = x * y 3 print(res) 4 c = calc(a,b) 5 print(c) 定义函数: 函数与过程的区别:函数有返回值,而过程就是没有返回值的函数。 return作用:1.当前函数结束,即下面语句不再执行;2.返回值,比如未指定return,函数的返回值为None; 1 def test1(): 2 print('in the test1') #不写隐式返回None 3 def test2(): 4 print('in the test2') 5 return 0 # 返回0 6 def test3(): 7 print('in the test3') 8 return 1,'hello',['alex','wupeiqi'],{'name':'Alex'} #返回多个值 9 x = test1() 10 y = test2() 11 z = test3() 12 print(x) 13 print(y) 14 print(z) 15 16

Python函数作用域及传递变量笔记

╄→гoц情女王★ 提交于 2020-01-19 00:41:09
Python函数作用域及传递变量 全局作用域与局部作用域 函数内调用全局变量 外层作用域与局部作用域 局部作用域调用外层作用域变量 向函数传递不可变类型 向函数传递可变类型 传递可变类型时不影响原始值 全局作用域与局部作用域 x = 55 def func ( ) : x = 99 print ( x ) print ( '全局变量x:' , x ) print ( '函数内变量x:' ) func ( ) 输出: 全局变量x : 55 函数内变量x : 99 局部作用域Local不能修改全局作用域Global的变量 函数内调用全局变量 x = 55 def func ( ) : global x x = 99 print ( x ) print ( '全局变量x' , x ) print ( '函数内变量x:' ) func ( ) print ( '全局变量x' , x ) 输出: 全局变量x 55 函数内变量x : 99 全局变量x 99 使用global关键字可声明全局变量 外层作用域与局部作用域 def func ( ) : x = 1 def nested ( ) : x = 2 print ( x ) nested ( ) print ( x ) func ( ) 输出: 2 1 局部作用域Local不能修改封装作用域Enclosure(外层函数)的变量

DHCP保留地址与超级作用域centos7

纵饮孤独 提交于 2020-01-18 23:50:55
一 .保留地址概念请百度 超级作用域功能的简单概述:给多个网段分发ip地址。 二 .保留地址(给client指定ip)   1.注释掉其它的作用域(所有带范围的块语句),只留下一个配置好的作用域(单作用域配置方法https://blog.csdn.net/kingoflongevity/article/details/103960108)   2.知道你要保留的客户机的ip地址mac地址 可用 arp -a 命令查看自己的MAC地址   3.准备一台client;   4. 修改配置文件如下:    hardware 填写你对应的想把ip指定给对应客户机或者服务器的MAC地址;    fixed-address 就是填ip地址啦;(英语好其实看注释就知道了)   想保留多个地址,把整个块语句重新复制一份;   5.重启dhcpd service,启动客户机查看保留是否成功;(遇到无法重启服务请检查文件是否符合语法要求 dhcpd -t -cf dhcpd.conf文件的绝对路径 一步步排除问题所在)。 三 .DHCP超级作用域   1.准备2台client。   2.可以用上面的dhcp   3.建立一张虚拟网卡 第一步:进入 /etc/sysconfig/network-scripts/ 目录下 复制一份网卡配置文件 第二步:修改网卡device信息 和 name信息 与你的 `

12步轻松搞定python装饰器

情到浓时终转凉″ 提交于 2020-01-18 10:40:14
12步轻松搞定python装饰器 呵呵!作为一名教python的老师,我发现学生们基本上一开始很难搞定python的装饰器,也许因为装饰器确实很难懂。搞定装饰器需要你了解一些函数式编程的概念,当然还有理解在python中定义和调用函数相关语法的一些特点。 我没法让装饰器变得简单,但是通过一步步的剖析,我也许能够让你在理解装饰器的时候更自信一点。因为装饰器很复杂,这篇文章将会很长(自己都说很长,还敢这么多废话blablabla...前戏就不继续翻译直接省略了) 1. 函数 在python中,函数通过def关键字、函数名和可选的参数列表定义。通过return关键字返回值。我们举例来说明如何定义和调用一个简单的函数: >>> def foo(): ... return 1 >>> foo() 1 方法体(当然多行也是一样的)是必须的,通过缩进来表示,在方法名的后面加上双括号()就能够调用函数 2. 作用域 在python中,函数会创建一个新的作用域。python开发者可能会说函数有自己的命名空间,差不多一个意思。这意味着在函数内部碰到一个变量的时候函数会优先在自己的命名空间里面去寻找。让我们写一个简单的函数看一下 本地作用域 和 全局作用域有什么不同: >>> a_string = "This is a global variable" >>> def foo(): ... print

python 装饰器

浪子不回头ぞ 提交于 2020-01-18 10:38:09
[译] 12步轻松搞定python装饰器 字数6504 阅读7477 评论12 喜欢49 呵呵!作为一名教python的老师,我发现学生们基本上一开始很难搞定python的装饰器,也许因为装饰器确实很难懂。搞定装饰器需要你了解一些函数式编程的概念,当然还有理解在python中定义和调用函数相关语法的一些特点。 我没法让装饰器变得简单,但是通过一步步的剖析,我也许能够让你在理解装饰器的时候更自信一点。因为装饰器很复杂,这篇文章将会很长(自己都说很长,还敢这么多废话blablabla...前戏就不继续翻译直接省略了) 1. 函数 在python中,函数通过def关键字、函数名和可选的参数列表定义。通过return关键字返回值。我们举例来说明如何定义和调用一个简单的函数: >>> def foo(): ... return 1 >>> foo() 1 方法体(当然多行也是一样的)是必须的,通过缩进来表示,在方法名的后面加上双括号()就能够调用函数 2. 作用域 在python中,函数会创建一个新的作用域。python开发者可能会说函数有自己的命名空间,差不多一个意思。这意味着在函数内部碰到一个变量的时候函数会优先在自己的命名空间里面去寻找。让我们写一个简单的函数看一下 本地作用域 和 全局作用域有什么不同: >>> a_string = "This is a global