作用域

变量不同作用域的测试

痴心易碎 提交于 2019-11-29 16:01:40
source code: < html > < script > var x = 10 ; foo = { x : 20 , bar : function ( ) { var x = 30 ; return this . x ; } } console . log ( foo . bar ( ) , ( foo . bar ) ( ) , ( foo . bar = foo . bar ) ( ) , ( foo . bar , foo . bar ) ( ) ) ; // 20 20 10 10 </ script > </ html > 第一个foo.bar(): 进入函数体执行时this 指向foo对象,因此this.x为20 第二种写法实际等价于第一种: 第三次执行this指向全局变量Window: 第四次的逗号表达式等价于第三次执行: 要获取更多Jerry的原创文章,请关注公众号"汪子熙": 来源: https://blog.csdn.net/i042416/article/details/100849511

数据

自作多情 提交于 2019-11-29 15:50:39
基本数据类型 C语言包含的基本数据类型:整型、浮点型、指针、聚合类型。 整型 整型包含:字符型、短整型、整型、长整型,它们都分为有符号和无符号两个版本。 标准规定:长整型至少与整型一样长,整型至少与短整型一样长。 limit.h 中说明了不同整型的特点:最小值、最大值。 缺省的 char 类型,在不同的编译器下解释不同,既可以被解释为 unsigned char ,也可以被解释为 signed char ,只有程序中使用 char 类型的值是 unsigned char 和 signed char 的交集时,程序才可以移植。 字面值 字面值是一种实体,指定了自身的值,并且不允许发生改变。 数据的表示分为十进制、八进制(数字前面加0)、十六进制(数字前面加0x)。 整数字面值添加后缀 L 或者 l ,整数将解释为 long 类型。 整数字面值添加后缀 U 或者 u ,整数将解释为 unsigned 类型。 在一个多字节的字符常量前面加 L ,它就是宽字符常量。 枚举类型 枚举类型就是指它的值为符号常量,而不是字面值常量。 枚举的符号名都是整型,默认第一个符号名是0。 只对部分符号名赋值是合法的,如果没有显示指定符号名的值,默认它比前面一个符号名大1。 浮点型 浮点型包含: float 、 double 、 long double 。 标准规定: long double 至少和

python 函数

随声附和 提交于 2019-11-29 13:58:46
函数 简介 ​ 函数是组织好的,可重复使用的,用来实现,单一或相关联的功能 ​ 函数能提高模块的利用行,和代码的重复利用率以及冗余,其实你已经使用了很多的Python函数,比如print()。 ​ 但是你也可以自己创建函数,这种叫做自定义函数 函数规则 函数代码块必须以def 关键字开头,后面为函数标识符名以及() 任何传入的参数和自定变量必须放在圆括号中间。圆括号之间可以用来定义参数 函数的第一行语句可以选择性的使用注释字符来表明函数的作用及说明 函数的内容以冒号起始,并且必须缩进 return [表达式] 结束函数,选择性的返回一个值给调用该函数方。不带表达式的函数默认会返回 None 语法 #语法 def functionname( parameters ): "函数_文档字符串" function_suite return [expression] #实例 def printme( str ): "打印传入的字符串到标准显示设备上" print(str) return 默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。 函数调用 定义一个函数只能给函数一个名称,指定函数里包含的参数,和代码块结构 函数基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从python提示符执行 #!/usr/bin/python # -*- coding: UTF-8 -

【JS语法】作用域与绑定图示

拟墨画扇 提交于 2019-11-29 13:45:46
起因:作用域攀爬 JavaScript 允许在函数体内部,引用当前环境的其他变量。 当前环境找不到变量时,就攀爬到上一层区块寻找,直到攀爬到全局(window)为止。 this 指代的就是当前环境,所以其值是根据函数调用时的环境决定,并不是不变的。 绑定方式一:bind bind 可以指定函数的任意上下文。 bind 处理函数不会立即执行,只会返回一个新的函数。 绑定方式二:call / apply 在作用域绑定方面,call / apply 二者功能一致,可以替换。不同的只是参数传入的方式。 call / apply 处理函数是即时调用的,不会返回一个新的函数。所以与 bind 方式的区别在于使用场景,而不是功能。 此方式主要用于 类定义时,出借当前环境,达到继承的效果: function Product(name, price) { this.name = name; this.price = price; } function Food(name, price) { Product.call(this, name, price); // <==> Product.apply(this, [name, price]); // <==> Product.bind(this, name, price)(); this.category = 'food'; } console.log

Python之路Python作用域、匿名函数、函数式编程、map函数、filter函数、reduce函数

懵懂的女人 提交于 2019-11-29 10:19:34
一、作用域 return 可以返回任意值 例子 def test1(): print("test1") def test(): print("test") return test1 res = test() print(res)    输出结果 test <function test1 at 0x021F5C90>    分析:这里print(res)输出的是test1函数在内存中的地址,return也是可以返回的 ,加上括号就可以运行函数了 例子2 name = "pony" def test1(): name = "nicholas" def inner(): name = "jack" print(name) return inner res = test1() print(res) res()    输出结果 <function test1.<locals>.inner at 0x02195C48> jack    分析: test1函数返回了inner函数的内存地址,并被赋值给res,所以最后在res后加上括号就可以直接执行,注意这里执行的是inner函数,打印name选择的是局部变量name ="jack",而非选择调用执行的res()所在的name = "pony" 例子3 def foo(): name = 'jack' def bar(): name =

什么是闭包

两盒软妹~` 提交于 2019-11-29 10:07:30
从事web开发工作,尤其主要是做服务器端开发的,难免会对客户端语言JavaScript一些概念有些似懂非懂的,甚至仅停留在实现功能的层面上,接下来的文章,是记录我对JavaScript的一些概念的理解。欢迎大牛拍砖吐糟 理解JS中的闭包,首先理解JavaScript中的作用域以及作用域链的问题,可以参考下我的拙见 JS函数作用域及作用域链理解 。 什么是闭包 学术说法:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。(你能看懂吗?反正我不能) 专业说法:函数对象可以通过作用域链相互关联起来,函数体内部的变量都可以保存在函数作用域内。(这个你懂吗?我略懂) 通俗说法:所有JavaScript函数都是闭包,因为函数都是对象,都关联到作用域,并且变量都保存在函数作用域内。(这个有点扯,困惑我的闭包,就这么简单) 但是我们通常说的闭包是当一个函数嵌套另一个函数,外部函数将嵌套函数对象作为返回值返回的时候,我们把这种情况称为闭包。 看下面一个例子 function func() { var num = 0; //声明局部变量:num function f() { //嵌套函数,在作用域里 console.log(++num) } return f(); //调用嵌套函数f,并将f的执行结果返回 } func(); //输出:1

Python命名空间和作用域

痞子三分冷 提交于 2019-11-29 09:54:04
命名空间 是从命名到对象的映射。当前命名空间主要是通过 Python 字典实现的,不过通常不关心具 体的实现方式(除非出于性能考虑),以后也有可能会改变其实现方式。以下有一些命名空间的例 子:内置命名(像 abs() 这样的函数,以及内置异常名)集,模块中的全局命名,函数调用中的局部 命名。某种意义上讲对象的属性集也是一个命名空间。关于命名空间需要了解的一件很重要的事就是 不同命名空间中的命名没有任何联系,例如两个不同的模块可能都会定义一个名为 maximize 的函数而 不会发生混淆-用户必须以模块名为前缀来引用它们。 顺便提一句,Python 中任何一个“.”之后的命名为 属性 --例如,表达式 z.real 中的 real 是 对象 z 的一个属性。严格来讲,从模块中引用命名是引用属性:表达式 modname.funcname 中, modname 是一个模块对象, funcname 是它的一个属性。因此,模块的属性和模块中的全局命名有 直接的映射关系:它们共享同一命名空间! 属性可以是只读过或写的。后一种情况下,可以对属性赋值。你可以这样作: modname.the_answer = 42 。可写的属性也可以用 del 语句删除。例如: del modname.the_answer 会从 modname 对象中删除 the_answer 属性。

js基础-作用域和作用域链以及闭包

十年热恋 提交于 2019-11-29 08:26:39
作用域概念: 作用域是可访问变量的集合。 在 JavaScript 中, 对象和函数同样也是变量。 在 JavaScript 中, 作用域为可访问变量,对象,函数的集合。 JavaScript 函数作用域: 作用域在函数内修改。 作用域分类:   全局作用域 和 局部作用域 局部作用域:   变量在函数内声明,只能在函数内部访问,即局部变量   函数参数也是局部变量 因为局部变量只作用于函数内,所以不同的函数可以使用相同名称的变量。 全局作用域:   变量在函数外定义,即为全局变量   全局变量有 全局作用域: 网页中所有脚本和函数均可使用。 如果变量在函数内没有声明(没有使用 var 关键字),该变量为全局变量。 在 HTML 中, 全局变量是 window 对象: 所有数据变量都属于 window 对象。 1 var a = 100;//全局 2 function fn(){ 3 var a =200; 4 console.log('函数作用域',a); 5 } 6 console.log('全局作用域',a); //全局作用域 100 7 fn();//函数作用域 200 JavaScript 变量生命周期: JavaScript 变量生命周期在它声明时初始化。 局部变量在函数执行完毕后销毁。 全局变量在页面关闭后销毁。 js中无块级作用域 1 if(true){ 2 var

作用域、变量提升、函数提升、数据类型

≡放荡痞女 提交于 2019-11-29 07:49:42
一、作用域分类 (作用域范围内定义的变量,整个作用域都可以访问)    1. 全局作用域   使用var声明(或者不严格模式下没有声明)且在函数外定义的变量,其作用域范围是全局的,称其为全局作用域。   2. 函数作用域   使用var声明且在函数内部定义的变量,其作用域范围是整个函数,称其为函数作用域。   3. 块作用域(ES6)   使用let(或者const 常量)声明且在一个花括号(非函数)里面,其作用域范围就是这个花括号以内,称其为块作用域。 二、变量提升 (变量声明会提升至函数或者语句的最前面,位置还在其作用域范围内,let跟const定义的变量不会变量提升) 三、函数提升 (只有函数声明会提升,函数表达式不会提升)    test()// 正常执行   function test () {}   testOne()// testOne 不是一个函数   var testOne = function () {} 四、数据类型   1. 六种基本数据类型 (undefined; null; boolean; number; string; symbol) 不能够是new Boolean; new String; new Number (这些的类型是object)   2. 对象 (Array; Date; Math; RegExp; Function等) 来源:

函数1——作用域相关

≡放荡痞女 提交于 2019-11-29 06:40:29
函数1——作用域相关 为何使用函数? 减少代码冗余和增加代码的可读性 1.函数的一些概念 def 是可执行的代码。def是一个可执行的语句——函数并不存在,直到函数运行了def 后(函数被调用后)才存在。def语句在模块文件中编写,在模块文件第一次被导入的时候生成定义的函数。 def创建了一个对象并将其赋值给某一变量名(即函数名)。当 运行 到def语句时,它将会生成一个新的函数对象并将其赋值给这个函数名,就像所有的赋值一样,函数名变成了某一函数的引用。 return 将一个结果对象发送给调用者。当函数被调用时,其调用者停止运行直到这个函数完成他的工作,函数才将控制权返回调用者。函数是通过return语句将计算的值传递给调用者的。 yield 向调用者返回一个结果对象,并记住它离开的状态 global 声明一个模块级的变量。 nonloca l声明一个封闭的函数变量。nonlocal语句允许一个函数来赋值一条语法封闭的def语句的作用域中已经有的名称。 2.作用域 ​ python创建、改变或或查找变量名都是在命名空间(一个保存变量名地地方)中进行的。也就是说,在代码中变量名被赋值的位置决定了变量名能被访问到地范围。(在代码中给一个变量赋值的地方决定了这个变量存在与那个命名空间)。 ​ 在默认情况下,一个函数的所有变量名都是与函数命名空间相关联的: 1