函数声明

javascript变量声明 及作用域

扶醉桌前 提交于 2019-12-19 09:27:00
javascript变量声明提升 javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都提升到 当前作用域 的最前面。 先看一段代码 1 2 3 4 5 var v = "hello" ; ( function (){ console.log(v); var v = "world" ; })(); 这段代码运行的结果是什么呢? 答案是:undefined 这段代码说明了两个问题, 第一,function作用域里的变量v遮盖了上层作用域变量v。代码做少些变动 1 2 3 4 5 var v = "hello" ; if ( true ){ console.log(v); var v = "world" ; } 输出结果为”hello”,说明 javascript是没有块级作用域的 。 函数是JavaScript中唯一拥有自身作用域的结构。 第二,在function作用域内,变量v的声明被提升了。所以最初的代码相当于: 1 2 3 4 5 6 var v = "hello" ; ( function (){ var v; //declaration hoisting console.log(v); v = "world" ; })(); 声明、定义与初始化 声明宣称一个名字的存在,定义则为这个名字分配存储空间

javascript变量声明提升

丶灬走出姿态 提交于 2019-12-19 09:26:37
https://www.cnblogs.com/silentjesse/p/4024536.html javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都提升到 当前作用域 的最前面。 先看一段代码 1 2 3 4 5 var v = "hello" ; ( function (){ console.log(v); var v = "world" ; })(); 这段代码运行的结果是什么呢? 答案是:undefined 这段代码说明了两个问题, 第一,function作用域里的变量v遮盖了上层作用域变量v。代码做少些变动 1 2 3 4 5 var v = "hello" ; if ( true ){ console.log(v); var v = "world" ; } 输出结果为”hello”,说明 javascript是没有块级作用域的 。 函数是JavaScript中唯一拥有自身作用域的结构。 第二,在function作用域内,变量v的声明被提升了。所以最初的代码相当于: 1 2 3 4 5 6 var v = "hello" ; ( function (){ var v; //declaration hoisting console.log(v); v = "world" ; })(); 声明、定义与初始化

深入理解 JavaScript 变量的作用域和作用域链

人走茶凉 提交于 2019-12-19 09:26:06
一个变量的作用域(scope)是程序源代码中定义这个变量的区域。简单的说,作用域就是变量与函数的可访问范围。全局变量拥有全局作用域,在JavaScript代码中的任何地方都有定义。局部变量是在函数体内声明而且只作用在函数体内部以及该函数体的子函数的变量。下面我们对全局作用域和局部作用域来做一个深入的理解。   1. 全局作用域(Global Scope)   全部变量拥有全局作用域,在代码的任何地方都有定义,一般来说以下几种情形拥有全局作用域:   (1)最外层函数和在最外层函数外面定义的变量拥有全局作用域,例如: 1 var scope="global"; //声明一个全局变量 2 function checksope(){ 3 function showglobal(){ 4 alert(scope); //弹窗全局变量 5 } 6 showglobal(); 7 } 8 checksope() // global 内部函数可以访问全局变量 (2)所有末定义直接赋值的变量自动声明为拥有全局作用域,例如: 1 function checksope(){ 2 var scope="local"; 3 scopeglobal="global"; 4 alert(scope); 5 } 6 checksope(); // local 7 alert(scopeglobal); //

JavaScript之函数作用域

[亡魂溺海] 提交于 2019-12-19 09:25:47
   有过类似C语言编程经验的同学应该都知道“块级作用域(block scope)”:花括号内的每一段代码都具有各自的作用域,而且在声明它们的代码段之外是不可见的。而在JavaScript中是没有块级作用域的,JavaScript取而代之地使用了“函数作用域(function scope)”:变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的。   光用文字解释平白无味,先来段让你为之一振的代码: function myTest(num){ var i = 0; if(num == 222){ var j = 0; for(var k=0; k<2; k++){ console.log(k); } console.log(k); } console.log(i); console.log(j); console.log(k); console.log(m); } myTest(111);   请认真阅读代码,仔细思考,认真回答问题。下面给出浏览器中运行的结果,检验下自己的答案吧!   如果你完全回答正确,并且已经明白所有原因,那么就没必要看下去了;如果你还未明白原因并且有一颗好奇、意欲一探究竟的心,那么就下来就要认真看完本博客了。   既然不懂,那就再继续认真看解释呗:JavaScript的函数作用域是指在函数内声明的所有变量在函数体内始终是可见的

前端面试必会 | 一文读懂现代 JavaScript 中的变量提升 - let、const 和 va

删除回忆录丶 提交于 2019-12-19 08:05:35
本文翻译自 https://blog.bitsrc.io/hoisting-in-modern-javascript-let-const-and-var-b290405adfda ,作者 Sukhjinder Arora,内容有部分删改,标题有改动。 许多 JavaScript 程序员将提升解释为 JavaScript 将声明(变量和函数)移至其当前作用域(函数或全局)顶部的行为。好像它们实际上已经移到了代码的顶部,事实并非如此。例如: console.log(a); var a = 'Hello World!'; 他们会说,上面的代码将在提升后转换为以下代码: var a; console.log(a); a = 'Hello World!'; 尽管看起来是这样,因为代码也工作正常了,但是 JavaScript 引擎事实上并不是这么做的,你的代码还是在这里。 那么,提升是什么呢? 在编译阶段,即在代码执行前的几微秒内,将对其进行扫描以查找函数和变量声明。所有这些函数和变量声明都添加到内存中称为 词法环境 的 JavaScript 数据结构内部。这样,即使在源代码中实际声明它们之前也可以使用它们。 词法环境是什么? 词法环境是用来保存标识符和变量映射关系的地方。标识符是变量或者函数的名字,变量是对实际对象(包括函数对象和数组对象)或者原始值的引用。 简而言之,

js函数的概念及作用 作用域

半腔热情 提交于 2019-12-19 04:46:37
函数的概念和作用 函数 函数对于任何语言来说都是一个核心概念,通过函数可以封装任意多条语句,而且可以在任何地方任何时候调用执行。函数使用 function 关键字声明后面跟一组参数以及函数体。语法如下: function functionName ( arg1 , arg2 ) { // 这里是要执行的代码 } 示例: <!DOCTYPE html> <html> <head> <script> function myFunction(){ alert("Hello World!"); } </script> </head> <body> <button οnclick="myFunction()">点击这里</button> </body> </html> 定义:函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。当调用该函数时,会执行函数内的代码。可以在某事件发生时直接调用函数(比如当用户点击按钮时),并且可由 JavaScript 在任何位置进行调用。 函数参数 ECMAScript 中函数的参数与大多数其他语言中的函数的参数有所不同,ECMAScript 中的函数不介意你传递多少个参数,也不会在意传递进来的参数是什么数据类型。 在调用函数时,您可以向其传递值,这些值被称为参数。这些参数可以在函数中使用。可以发送任意多的参数,由逗号 (,) 分隔: function

C++ 引用

亡梦爱人 提交于 2019-12-18 23:45:27
目录 引用: 引用: 1,定义: 引用就是某一变量的别名,对引用的操作与对该变量直接操作完全一样; 2,引用的声明方式: 类型标识符&引用名=目标变量名; ​ &:引用声明符 #include<iostream> using namespace std; int main() { int x=100; int&rx=x; cout<<"rx="<<rx<<endl; rx=200; cout<<"x="<<x<<endl; return 0; } 程序结果如下: rx=100; x=200; main函数第2行声明了变量x的引用rx,在第三行输出rx的内容,结果为100,即变量x的值。 第四行对引用rx赋值200,在第五行输出变量x的值,x=200. 可以看出引用rx和变量x访问的是同一个内存单元。 /*声明引用时,引用前面的类型标识符是指目标变量的类型,且必须同时对其进行初始化,声明代表哪一个变量。声明完毕后,相当于目标变量有两个名称,目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。引用变量定义时,引用一块内存,该引用就不能再引用其它内存了*/ 3,对引用的进一步声明: (1)不能建立void类型的引用。 ​ 任何实际存在的变量都是属于非void类型的,void含义是无类型或空类型,void只是在语法上相当于一个类型而已,所以不能建立void类型的引用 (2

C指针右左法则

荒凉一梦 提交于 2019-12-18 21:32:22
摘录的别人的: C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用来解决如何辩识一个声明的,两者可以说是相反的。右左法则的英文原文是这样说的: The right-left rule: Start reading the declaration from the innermost parentheses, go right, and then go left. When you encounter parentheses, the direction should be reversed. Once everything in the parentheses has been parsed, jump out of it. Continue till the whole declaration has been parsed. 这段英文的翻译如下: 右左法则:首先从最里面的圆括号看起,然后往右看,再往左看。每当遇到圆括号时,就应该掉转阅读方向。一旦解析完圆括号里面所有的东西,就跳出圆括号。重复这个过程直到整个声明解析完毕。 笔者要对这个法则进行一个小小的修正

常用eslint配置

独自空忆成欢 提交于 2019-12-17 14:27:00
"off"或者0 //关闭规则关闭 "warn"或者1 //在打开的规则作为警告(不影响退出代码) "error"或者2 //把规则作为一个错误(退出代码触发时为1) "no-alert": 0,//禁止使用alert confirm prompt "no-array-constructor": 2,//禁止使用数组构造器 "no-bitwise": 0,//禁止使用按位运算符 "no-caller": 1,//禁止使用arguments.caller或arguments.callee "no-catch-shadow": 2,//禁止catch子句参数与外部作用域变量同名 "no-class-assign": 2,//禁止给类赋值 "no-cond-assign": 2,//禁止在条件表达式中使用赋值语句 "no-console": 2,//禁止使用console "no-const-assign": 2,//禁止修改const声明的变量 "no-constant-condition": 2,//禁止在条件中使用常量表达式 if(true) if(1) "no-continue": 0,//禁止使用continue "no-control-regex": 2,//禁止在正则表达式中使用控制字符 "no-debugger": 2,//禁止使用debugger "no-delete

Linux内核编译时错误

梦想的初衷 提交于 2019-12-17 01:50:20
Linux内核剪裁编译时出来错误,如下 [root@yang linux-2.6.24.4]# make menuconfig make: Warning: File `/UP-Magic/exp/kernel/linux-2.6.24.4/arch/arm/Makefile' has modification time 3.8e+08 s in the future make[1]: Warning: File `scripts/Makefile.host' has modification time 3.8e+08 s i n the future HOSTCC scripts/basic/fixdep scripts/basic/fixdep.c: 在函数‘traps’中: scripts/basic/fixdep.c:377: 警告:提领类型双关的指针将破坏强重叠规则 scripts/basic/fixdep.c:379: 警告:提领类型双关的指针将破坏强重叠规则 HOSTCC scripts/basic/docproc make[1]: 警告:检测到时钟错误。您的创建可能是不完整的。 make[1]: Warning: File `scripts/Makefile.host' has modification time 3.8e+08 s i n the future