作用域

es6笔记

若如初见. 提交于 2019-11-27 18:54:53
ES6新标准 1、数据类型var let const var 函数作用域,如果声名在函数之外,就会是一个全局变量, 可以重复声名,赋值。 let 块级作用域,在同一个作用域里面无法重复声名 const 块级作用域,值无法被直接赋值 常量本身无法被改变,但是其值可以被改变 **** #### 三者之间一个明显区别 在全局作用域下面有一个for循环,定义一个循环变量i,如果使用 var来定义,那么,这个i就是一个全局变量,i因为它不在函数中。如果使用let 来定义,i在for循环结束之后会销毁,在for循环之外也无法访问到这个i了。 如果直接声名let和const变量在全局作用域里,它会是一个全局变量,只要声名在大括号{ }里,他就是一个局部变量 let同样也会提前声名,但是会有临时死区,未付值之前使用会报错 2、箭头函数 箭头函数特性 箭头函数没有自己的this属性,是继承其父作用域的this 其this属性是函数定义时就被指定 function Person(name,age,sex){ this.name=name, this.age=age, this.sex=sex, this.hobbies=["girl","leg","stocking"], this.printHobbies=function(){ //输出爱好 this.hobbies.map(function

作用域、链接属性、存储类型

人盡茶涼 提交于 2019-11-27 18:42:44
标识符: 首先,在讨论这三种东西之前,详细说明一下C语言中的标识符。 标识符是用户编程为变量、常量、函数、语句等指定的名字,就好比人名一样的东西。 标识符的命名规则如下: 1.只能由字母、数字、下划线组成,并且首字符不能是数字; 2.不能把C语言的关键字作为标识符; 3.对大小写敏感; 其次,需要明确,作用域和链接属性是在标识符范畴内讨论的,存储类型是在标识符中的 变量范畴 内讨论的。 作用域: 标识符的作用域就是程序中该标识符可以被使用的区域,由它的 声明位置决定 。 分为以下四类: 1.文件作用域  2.代码块作用域  3.原型作用域  4.函数作用域 1.文件作用域:   任何在所有代码块之外声明的标识符(变量、常量、函数名、语句等)具有,这表示这个标识符从它声明的位置到这个源文件结尾处都可以访问。   注意:在任何代码块之外声明的 函数名 也具有文件作用域,因为这个函数名本身并不属于任何代码块。 2.代码块作用域:   位于{}之间的所有语句称为代码块,在代码块内声明的标识符,其作用域为从其声明位置开始到这段代码块结束,它可以被这个区间内的语句访问。   注意:处于嵌套状态的代码块,当内层和层声明了相同的标识符时, 外层这个标识符在内层不再起作用 。编程中应该尽量避免出现这种情况。 3.原型作用域:   只适用于在函数原型中声明的参数名,作用域为函数原型中的()内

作用域问题的理解

被刻印的时光 ゝ 提交于 2019-11-27 15:45:32
例1:var a = 1function fn1(){ function fn2(){ console.log(a) } function fn3(){ var a = 4 fn2() } var a = 2 return fn3}var fn = fn1()fn() //输出多少调用过程:调用fn()=>fn1(),fn1()返回fn3,调用fn3,fn3中调用了fn2,输出2。分析:fn2中没有a变量,fn2被定义在fn1中,获得fn1中的变量a=2例2:var a = 1function fn1(){ function fn3(){ var a = 4 fn2() } var a = 2 return fn3}function fn2(){ console.log(a)}var fn = fn1()fn() //输出多少调用过程:fn()=>fn1()=>fn3()=>fn2()=>consolo.log(a)=>输出分析:fn2中没有a变量,在fn1作用域中寻找,任没有,在全局作用域寻找,输出1例3:var a = 1function fn1(){ function fn3(){ function fn2(){ console.log(a) } var a fn2() a = 4 } var a = 2 return fn3}var fn = fn1()fn() /

一次php foreach 变量作用域的踩坑记录

戏子无情 提交于 2019-11-27 15:29:08
记录一次因为对PHP作用域理解不够导致的小坑。 自测需求的时候发现有一块地方数据很奇怪,要么该写的没有写入、要么数据被写入双份。剥离业务后的代码大概如下: <?php $arr = [ ['is_checked'=>false,'k'=>1], ['is_checked'=>false,'k'=>2], ]; foreach ($arr as &$item) { if ($item['k']==1) { $item['is_checked'] = true; } } echo '<pre>'; foreach ($arr as $item) { if ($item['is_checked']) { print_r($item); } } 我预想中 上面的代码应该是只打印arr里的第一条记录,也就是 ['is_checked'=>true,'k'=1] ,然而实际运行发现打印的是这样的: Array ( [is_checked] => 1 [k] => 1 ) Array ( [is_checked] => 1 [k] => 1 ) 居然打印了两条记录,而且两条的k都是1。 断点调试的时候也发现,运行到第二个foreach里的时候 arr确实变成了这样的数组: [ ['is_checked'=>true,'k'=>1], ['is_checked'=>true,'k'=>1], ]

【ES6新增语法详述】

爷,独闯天下 提交于 2019-11-27 15:15:53
目录 1. 变量的定义 let const 2. 模版字符串 3. 数据解构 4. 函数扩展 设置默认值 箭头函数 5. 类的定义 class 6. 对象的单体模式 原文: http://blog.gqylpy.com/gqy/275 "@ ES6新增了关于变量的定义,函数扩展,数据结构,类,模块等概念,本文将详细介绍常用的ES6语法。 *** 1. 变量的定义 let ES6中新增了let语法,用来声明变量,用法类似var。 ==let定义的变量只在当前代码块内有效.== 如下示例: <script> if (true) { var username = 'zyk'; let age = 60; } console.log(username); // zyk console.log(age); // 错误 </script> ES5中只有全局作用域和函数作用域,没有块级作用域,所以下面代码中的var变量定义会被提升到函数作用域顶部: <script> var username = 'zyk'; function foo() { console.log(username); // 打印结果为:undefined if (true) { var username= "无名"; // var定义的变量会被提升至作用域的顶部 } } foo() </script> 而=

【ES6新增语法详述】

老子叫甜甜 提交于 2019-11-27 15:12:35
目录 1. 变量的定义 let const 2. 模版字符串 3. 数据解构 4. 函数扩展 设置默认值 箭头函数 5. 类的定义 class 6. 对象的单体模式 原文: http://blog.gqylpy.com/gqy/275 "@ ES6新增了关于变量的定义,函数扩展,数据结构,类,模块等概念,本文将详细介绍常用的ES6语法。 *** 1. 变量的定义 let ES6中新增了let语法,用来声明变量,用法类似var。 ==let定义的变量只在当前代码块内有效.== 如下示例: <script> if (true) { var username = 'zyk'; let age = 60; } console.log(username); // zyk console.log(age); // 错误 </script> ES5中只有全局作用域和函数作用域,没有块级作用域,所以下面代码中的var变量定义会被提升到函数作用域顶部: <script> var username = 'zyk'; function foo() { console.log(username); // 打印结果为:undefined if (true) { var username= "无名"; // var定义的变量会被提升至作用域的顶部 } } foo() </script> 而=

你知道用AngularJs怎么定义指令吗?

我们两清 提交于 2019-11-27 14:12:15
前言 最近学习了下angularjs指令的相关知识,也参考了前人的一些文章,在此总结下。 欢迎批评指出错误的地方。 Angularjs指令定义的API AngularJs的指令定义大致如下 angular.module("app",[]).directive("directiveName",function(){ return{ //通过设置项来定义 }; }) 其中return返回的对象包含很多参数,下面一一说明 1.restrict (字符串)可选参数,指明指令在DOM里面以什么形式被声明; 取值有:E(元素),A(属性),C(类),M(注释),其中默认值为A; E(元素):<directiveName></directiveName> A(属性):<div directiveName='expression'></div> C(类): <div class='directiveName'></div> M(注释):<--directive:directiveName expression--> 例如restrict:‘EA’ 则表示指令在DOM里面可用元素形式和属性形式被声明; 一般来说,当你创建一个有自己模板的组件的时候,需要使用元素名,如果仅仅是为为已有元素添加功能的话,就使用属性名 注意:如果想支持IE8,则最好使用属性和类形式来定义。 另外Angular从1.3

夯实JS主要知识点

。_饼干妹妹 提交于 2019-11-27 12:25:13
夯实JS主要知识点 转自:https://juejin.im/post/5d54e78be51d4561b072dce6 从事前端行业到现在,感觉自己进步最大的时候就是去年打算换工作开始学习的那段时间,特别是看 yck 大佬的掘金小册《前端面试之道》的那段时间。正是那段时间的学习,慢慢对前端知识体系有了个模糊的轮廓,而且也开始接触掘金这个有意思的技术平台。如今工作尘埃落定,倒开始懒散了,通勤路上又开始玩游戏了,晚上回家又开始玩游戏不看书了,闲的时候开始在微信群QQ群注水了。可是距离30岁越来越近,眼前的路却越来越模糊。我知道留给我补课的时间不多了。工作的前三年已经被我挥霍掉,如果这两年不把失去的时间补回来,我可能永远都只能停留在初中级程序员的水平。谨记我还是一个半路出家的非科班出身的大龄初级前端开发工程师,自勉! 基本类型和引用类型 类型判断 强制类型转换 作用域 执行上下文 理解函数的执行过程 this 指向 闭包 原型和原型链 js 的继承 event loop 基本类型和引用类型 js中数据类型分为基本类型和引用类型,基本类型有六种: number string boolean null undefined symbol (es6) 引用类型包括对象 object 、数组 array 、函数 function 等,统称对象类型: object string 类型即字符串

闭包与作用域链,思考题目

余生长醉 提交于 2019-11-27 12:18:56
var nAdd; var t = function() { var n = 99; nAdd = function() { n++; } var t2 = function() { console.log(n) } return t2; }; var a1 = t(); var a2 = t(); nAdd(); a1(); //99 a2(); //100 当执行 var a1 = t()的时候,变量 nAdd 被赋值为一个函数 ,这个函数是function (){n++},我们命名这个匿名函数为 fn1 吧。接着执行 var a = t()的时候,变量 nAdd 又被重写了,这个函数跟以前的函数长得一模一样,也是function (){n++},但是这已经是一个新的函数了,我们就命名为 fn2 吧。 所以当执行 nAdd 函数,我们执行的是其实是 fn2,而不是 fn1,我们更改的是 a2 形成的闭包里的 n 的值,并没有更改 a1 形成的闭包里的 n 的值。所以 a1() 的结果为 99 ,a2()的结果为 100。 来源: https://www.cnblogs.com/Jamie1032797633/p/11362498.html

JavaScript

北慕城南 提交于 2019-11-27 10:54:59
一、简介   前面我们学习了html和css,但是我们写的网页不能动起来,如果我们需要网页出现各种效果,那么我们就要学习一门新的语言了,那就是JavaScript,JavaScript是世界上最流行的脚本语言,而且Javascript和Python一样也是一门全栈开发语言,并且跨平台。浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处理。 二、代码存放位置   理论上放在body和head中都可以,但是推荐放在body代码块底部,因为Html代码是从上到下执行,如果Head中的js代码耗时严重,就会导致用户长时间无法看到页面,如果放置在body代码块底部,那么即使js代码耗时严重,也不会影响用户看到页面效果,只是js实现特效慢而已。   Js代码可以放在一个单独的文件中,然后通过 <script src="common.js" type="text/javascript"></script>可以将其导入进来,或者直接在html文件中直接书写代码,如下面所示,其中两种方式的 type都可以不用写,因为浏览器默认的便是javascript     <script type= "text/javascript" >      Js代码内容     < / script> 三、变量