作用域

JavaScript函数作用域和变量

放肆的年华 提交于 2020-03-01 07:52:33
作用域 定义:一个变量可以生效的范围 变量不是在所有的地方都可以使用,而这个变量的使用范围就是作用域 函数作用域 JS划分作用域是用大括号划分的 局部作用域 在JS中只有函数能生成一个局部作用域,别的都不行 每一个函数都是一个作用域 变量在函数内声明,变量为局部变量 //在函数大括号之中声明的变量,我们称之为局部变量 function foo ( ) { var a = 10 ; //在大括号之中声明的变量只能在这个大括号之中使用 console . log ( a ) ; } foo ( ) ; //运行结果: 10 console . log ( a ) ; //运行结果: ReferenceError: a is not defined 表示引用错误,a未被定义 因为局部变量只作用于函数内,所以不同的函数可以使用相同名称的变量。 局部变量在函数开始执行时创建,函数执行完后局部变量会自动销毁 全局作用域 全局作用域是最大的作用域 生命周期是和程序同步的,程序不关闭,作用域一直存在 变量在函数外定义,即为全局变量。 var a = 1 ; //变量声明没有被大括号包裹,我们称之为全局变量 //这个变量在任何地方都可以访问 console . log ( a ) ; //运行结果: 1 function foo ( ) { console . log ( a ) ; } foo (

Eclipse快捷键大全(转载)

感情迁移 提交于 2020-03-01 06:29:58
Ctrl+1 快速修复(最经典的快捷键,就不用多说了) Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加) Ctrl+Alt+↑ 复制当前行到上一行(复制增加) Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了) Alt+↑ 当前行和上面一行交互位置(同上) Alt+← 前一个编辑的页面 Alt+→ 下一个编辑的页面(当然是针对上面那条来说了) Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性 Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后) Shift+Ctrl+Enter 在当前行插入空行(原理同上条) Ctrl+Q 定位到最后编辑的地方 Ctrl+L 定位在某行 (对于程序超过100的人就有福音了) Ctrl+M 最大化当前的Edit或View (再按则反之) Ctrl+/ 注释当前行,再按则取消注释 Ctrl+O 快速显示 OutLine Ctrl+T 快速显示当前类的继承结构 Ctrl+W 关闭当前Editer Ctrl+K 参照选中的Word快速定位到下一个 Ctrl+E 快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示) Ctrl+/(小键盘) 折叠当前类中的所有代码 Ctrl+×(小键盘) 展开当前类中的所有代码 Ctrl

深入理解ES6系列笔记之第一章《块级作用域绑定》

人盡茶涼 提交于 2020-03-01 03:27:38
块级作用域绑定 本文仅仅作为前端实习面试的笔记内容,因此不能完全保证内容正确性,如有错误,欢迎指正! var声明及变量提升(Hoisting)机制 在函数作用域或者全局作用域通过关键字var声明的变量,无论实际上在哪里声明,都会被当作 当前作用域 顶部声明的变量。 function getValue (condition) { if (condition) { var value = 'blue' // other operations return value } else { // 此处可以访问value变量,其值为undefined return null } // 此处可以访问value变量,其值为undefined } 在预编译阶段,JavaScript引擎会将上面代码修改成下面这个样子 function getValue (condition) { var value if (condition) { value = 'blue' // other operations return value } else { // 此处可以访问value变量,其值为undefined return null } // 此处可以访问value变量,其值为undefined } 可以看到,变量value的声明提升到目前 函数作用域 的顶部,初始化操作仍在原来位置

angularJS directive详解

烂漫一生 提交于 2020-02-29 06:25:12
前言 最近学习了下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

angularJS directive用法详解

落花浮王杯 提交于 2020-02-29 06:21:57
前言 最近学习了下angularjs指令的相关知识,也参考了前人的一些文章,在此总结下。 欢迎批评指出错误的地方。 Angularjs指令定义的API AngularJs的指令定义大致如下 angular.module("app",[]).directive("directiveName",function(){ return{ //通过设置项来定义 }; })其中return返回的对象包含很多参数,下面一一说明 你知道用AngularJs怎么定义指令吗?0 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--> 你知道用AngularJs怎么定义指令吗?1 例如restrict:‘EA’ 则表示指令在DOM里面可用元素形式和属性形式被声明; 一般来说,当你创建一个有自己模板的组件的时候,需要使用元素名,如果仅仅是为为已有元素添加功能的话,就使用属性名

007_EL表达式的简化用法为什么一般只是省略pageScope

那年仲夏 提交于 2020-02-29 01:00:42
因为EL表达式默认查找的循序是先查找pageContext--->request---->session--->application,如果都没有查找到的话就会返回一个null值 如果省略作用域对象的话会造成两个弊端: 1.定位出错 2.查找效率降低 但是我们使用pageContext作用域还用的着使用el表达式吗? 什么是pageContext作用域?他的用法是什么,这个作用域对象声明周期? pageContext是jsp文件的九大内置对象,我们再调用jsp文件时,并不像servlet()的方法一样,有request与repose连个参数,我们只是调用了一个转发路径, 所以jsp文件必须具有内置对象才能调用共享作用域中的参数。但是我一直使用的都是EL表达是直接获共享作用域中的值啊,根本就没有使用过他的九大内置对象。 pagecontext当前作用域代表的是谁啊?总不能是request里的参数吧? 来源: https://www.cnblogs.com/pogusanqian/p/12381127.html

作用域和作用域链

≡放荡痞女 提交于 2020-02-28 21:57:38
作用域与作用域链     ① 作用域属于一个函数,一个函数产生了不一样的作用域     ② 函数名 .[[scope]] 函数的隐式属性     ③ [[scope]] 指的就是作用域,其中存储了运行期的上下文的集合,而这一集合就是作用域链     ④ 查找变量:从作用域链的顶端依次向下查找 ( 在那个函数里面查找变量,就上那个函数的作用域链的顶端依次向下查找变量 )   2. 函数的执行期上下文     ① 当函数执行的前一刻,会创建一个称为执行期上下文的内部对象 AO     ② 一个执行期上下文定义了一个函数执行时的环境(也就是函数预编译创建 AO 后下面的步骤操作),函数每次执行时对应的执行上下文都是独一无二的     ③ 多次调用一个函数会导致创建多个执行上下文,当函数执行完毕,它所产生的执行上下文会被销毁    3 . 用代码和图解说明函数执行时的作用域链和执行上下文问题     ① 代码 function a(){ function b(){ var b = 234; } var a = 123; b(); } var glob = 100; a();     ② 说明 代码执行说明 1. a被定义时,在其自己所处的环境下(全局环境)创建了一个执行期上下文(GO)将其放在 其作用域链的顶端,即0位处 2. a被执行时,会再次创建一个属于自己函数体的执行期上下文(AO

ES6基础

落花浮王杯 提交于 2020-02-28 20:11:44
一、let和var 1、作用域只局限于当前模块 let声明变量 var是全局作用域变量,在代码块中和代码块外面都有效果 2、使用let声明的变量作用域不会被提升 { let str1='var1'; var str2= 'var2'; } console.log(str2);//undefined,var方式声明 console.log(str1);//报错,let方式声明 var str1 = 'var1' 分解为两步: var str1; console.log(str1); str1='var1' 而let则不会将作用域提升,直接报错。 3、在相同的作用域下不能重复声明 { var str1 = 'var1'; var str1 = 'var2'; //最终为var2 let str2 = 'var3'; let str2 = 'var4';//会报错,重复定义 } 4、for循环体现let的父子作用域 <button>按钮1</button> <button>按钮2</button> <button>按钮3</button> <button>按钮4</button> <button>按钮5</button> var btns = document.querySelectorAll('button'); for(var i=0; i<btns.length; i++){

javaScript中变量的作用域

大兔子大兔子 提交于 2020-02-28 15:24:47
https://www.cnblogs.com/m-chaoyue/p/6768254.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>javaScript中变量的作用域</title> <script type="text/javascript"> //javaScript中变量的作用域 //案例1 function fn1(){ if(true){ age = 6; // console.log(salary); //ReferenceError: salary is not defined } console.log(age); salary = 18; console.log(salary + "****"); } fn1(); console.log(salary + "----"); //参考网页https://www.cnblogs.com/m-chaoyue/p/6768254.html /* 在js中,变量的定义并不是以代码块作为作用域的,而是以函数作为作用域。也就是说,如 果变量是在某个函数中定义的,那么,它在函数以外的地方是不可见的。但是,如果该变量是定 义在if或者for这样的代码块中,它在代码块之外是可见的。 在js中,术语"全局变量"指的是定义在所有函数之外的变量

一个基本的面试问题:可以解释一下什么是闭包吗?

好久不见. 提交于 2020-02-28 14:09:08
面对面试问题,我们总是如临大敌。 令人憎恶的面试问题 之前,我参加了一个面试,其中工程团队要求我解释闭包的含义。当然,这不是我第一次被问到这个术语,但老实说,我还是有些慌张。 众所周知,闭包这个术语因难以定义而臭名昭著。 面试后,我对自己仍恐惧这个问题感到沮丧。我下定决心,要彻底弄明白闭包的含义。本篇博客将带领大家来看看我的经历。 匿名函数和IIFE不是闭包 文章开始前,我先阐明不会涉及的内容。在ES6之前的时代,闭包的常见用例是用于模仿私有方法的匿名函数/ IIFE(立即调用函数表达式),这些方法不是JavaScript所特有的。 通过在ES6中引入let 、const的引入和以及模块,很大程度上解决了var 的局限性所导致的这种情况和其他类似的用例。IIFE包括闭包,但不是闭包。 匿名函数也不是闭包。 anonymousFunc !== closure&& IIFE !== closure // true 学习这些用例很重要。如果你理解过去使用闭包的方式,就能理解现在如何使用闭包。 更别说还有许多ES5遗留代码。但是这不是今天要讲述的内容。既然已经说明,那一起来深入了解吧。 闭包的概念 在计算机科学中,闭包是一个有自己环境的函数,并且在该环境中至少有一个变量。MDN指出: “在JavaScript中,每当创建一个函数,闭包便产生。” 因此,函数和闭包是紧密联系的。每创建一个函数