js变量声明与赋值以及函数声明】的更多相关文章

if (!("a" in window)) { var a = 1; } alert(a); 结果:undefined 分析: 首先,所有的全局变量都是window的属性,语句 var a = 1;等价于window.a = 1: 第二,所有的变量声明都在范围作用域的顶部,如: alert("a" in window); var a; 相当于: var a; alert("a" in window); 这是因为JavaScript引擎首先会扫墓所…
目的是如果一个变量是已声明未赋值,就可以直接赋值,并且不能改变变量的作用域: 如果未声明的话,就重新声明, 在网上搜了下,常见的方法是if(typeof(a)=='undefined'){var a='ss';}, 但是这种方法对未声明或已声明未赋值的变量都会返回true.而且如果是这样: var a; function f(){ if(typeof(a)=='undefined') {var a=1;} } f(); console.log(a); 会显示undefined,因为f()里面只是…
3.1 先看下面的事例: ①var temp=0; ②temp=0; 当js解析器检测到①这种情况的时候,解析器会为这个变量开辟一个内存空间,如果前面已经存在这个变量,就会把这个变量覆盖掉. 当解析器检测到①这种情况的时候,解析器会寻找当前对象的父级对象有没有这个变量,以此查找,只到找到位置:如果还找不到,就会在windows对象里定义这个变量. 再看下面例子 ①function f() { var _temp = 0; console.log(_temp); } f(); console.lo…
Js代码分为两个阶段:编译阶段和执行阶段 Js代码的编译阶段会找到所有的声明,并用合适的作用域将它们关联起来,这是词法作用域的核心内容 包括变量声明(var a)和函数声明(function a(){})在内的所有声明都会在代码被执行前的编译阶段首先被处理 过程就好像变量声明和函数声明从他们代码中出现的位置被移动到执行环境的顶部,这个过程就叫做提升 只有声明操作会被提升,赋值和逻辑操作会被留在原地等待执行 变量声明 Js编译器会把变量声明看成两个部分分别是声明操作(var a)和赋值操作(a=2…
声明提前,函数声明提前,好吧,老生常谈的问题了.正好,前些天在掘金看到一道关于声明提前的笔试题,那么这里就以这道题来作为本文的引子吧,代码如下: console.log(a)//? a();//? ; function a(){ console.log(); } console.log(a);//? a = ; a();//? 四处分别输出什么?为什么?读完本文,最少也能在你心中激起一丝波澜了. 一.什么是声明提前 先来了解一个函数作用域的概念:变量在声明它们的函数体以及这个函数体嵌套的任意函数…
JS代码在执行的时候会先找出执行代码中定义的变量和函数,对其进行声明. 例1:console.log(a); var a = 4; 此时输出undefined.a变量在执行console.log(a);这条语句之前就已经被定义了只是没有赋值.实际的执行顺序是:var a ; console.log(a);a=4; 例2:var a = 3; function fn(){ console.log(a); var a = 4; } fn(); 执行输出undefined.在执行fn()函数时由于变量…
1. 变量声明提升 先看以下代码: 1)var in_window = "a" in window; console.log(in_window); 2)var in_window = "a" in window; console.log(in_window); if(!("a" in window)) { var a = 1; } 3)var a; var in_window = "a" in window; console…
在看JS高级程序设计时忽然想到这个问题,众所周知,直接赋值一个变量而为声明,会产生一个全局变量(或者说是全局对象的属性),但用var声明的变量 和 直接赋值而并未声明的变量 都有哪些区别呢,这是我在百度知道上搜到的,个人感觉总结的很全: 1.在函数作用域内 加var定义的变量是局部变量,不加var定义的就成了全局变量.使用var定义var a = 'hello World';function bb(){var a = 'hello Bill';console.log(a); }bb() // '…
JS中常见的两种函数声明(statement)方式有这两种: // 函数表达式(function expression) var h = function() { // h } // 函数声明(function declaration) function h() { // h } 先说两者的显著区别: 第一种声明方式也就是var声明方式, 函数只有在var语句声明之后才能被调用 第二种生命方式也就是function声明方式, 函数可以在function声明之前被调用 这是因为, 对第一种情况,…
相同点 注:函数声明和函数表达式的相同点包括但不限于以下几点 函数是一个值,所以和其他值一样,函数也可以进行被输出.被赋值.作为参数传给其他函数等相关操作,不管函数是以什么方式被定义的,当然和其他值的输出还是有些区别的. 我们先来输出这个值: function nameAlert(name){ alert('博主的名字是:' + name + ' .'); } alert(nameAlert); 注意输出的结果并不是1,而是这个函数的整个源代码,即输出结果为: function nameAler…
---恢复内容开始--- js中常见的两种函数声明方式如下: // 函数表达式 var f = function() { console.log(1); } // 直接声明 function f (){ console.log(2); } 第一种方式,函数只能在声明之后调用.因为这种方式声明的函数,是在函数运行的阶段才赋值给变量 f 的: 第二种方式,函数可以在声明函数的作用域内任一地方调用.因为这种方式,是在函数解析阶段赋值给标识符 f . 值得注意的是,当同时使用这两种方式声明同一个函数名,…
在JavaScript中,函数是经常用到的,在实际开发的时候,我想很多人都没有太在意函数的声明与函数表达式的区别,但是呢,这种细节的东西对于学好js是非常重要的. 函数声明与函数表达式用代码写出来是这样的: //函数声明 function say(){ console.log("函数声明") } //函数表达式 var say1 = function(){ console.log("函数表达式") } 那我们来看看,这两种方式到底有什么不同呢? 首先,在函数调用方面…
声明语句:声明语句是用来声明或定义标识符(变量和函数名)并给其赋值. 1:var 变量声明(5.3.1节): var语句用来声明一个或多个变量:var name_1 = [= value_1] [ ,..., name_n [= value_n]] var i; var j = 0; var x=1, y=2; var pi = 3.14, f = function(x) {return x*x}, k = f(x); 2:遗漏声明(3.9节) 读取一个没有声明的变量的值:JavaScript会…
函数声明 关于函数声明的方式,它的一个重要的特性就是函数声明提升(function declaration hoisting),意思是在执行代码之前会先读取函数声明.这就意味着可以把函数声明放在调用它的语句后面,如下所示: 1 sayHi(); //在调用语句的后面声明函数(function declaration hoisting) 2 function sayHi () { 3 console.log("Hello World"); 4 } 函数表达式 有多种表达方式,下面是最常见…
1.首先理解函数作用域 在JavaScript中,变量的定义并不是以代码块作为作用域的,而是以函数作用作用域的.也就是说,如果变量是在某个函数中定义的,那么它在函数以外的地方是不可见的.而如果该变量是定义在if 或者for这样的代码块中,它在代码块之外是可见的.另外,在JavaScript中,术语"全局变量"指的是定义在所有函数之外的变量,与之相对的是"局部变量",所指的是在某个函数中的变量.其中,函数内的代码可以像访问自己的局部变量那样访问全局变量,反之则不行.…
定义函数的方式有两种:一种是函数声明,另一种是函数表达式. 函数声明的语法如下: function functionName(arg0,arg1,arg2){ //函数体 } 函数表达式的语法如下: var functionName = function(arg0,arg1,arg2){ //函数体 } 两者的区别: 函数声明的特征就是函数声明提升,即执行代码之前js解析器会先读取函数声明,所以如下的代码不会提示错误. sayHi(); function sayHi(){ alert("Hi!&…
记得在面试腾讯实习生的时候,面试官问了我这样一道问题. //下述两种声明方式有什么不同 function foo(){}; var bar = function foo(){}; 当初只知道两种声明方式一个是函数声明一个是函数表达式,具体有什么不同没能说得很好.最近正好看到这方面的书籍,就想好好总结一番. 在ECMAScript中,有两个最常用的创建函数对象的方法,即使用函数表达式或者使用函数声明.对此,ECMAScript规范明确了一点,即是,即函数声明 必须始终带有一个标识符(Identif…
嵌套函数声明.没有标准的方法在局部块里声明函数,但可以在另一个函数的顶部嵌套函数声明. function f(){return "global"} function test(x){ var result=[]; function f(){return "local";}//block-local if(x){ result.push(f()); } result.push(f()); return result; } test(true);//["loc…
首先,JavaScript中函数有两种创建方式,即函数声明.函数表达式两种. 1.函数声明. function boo(){ console.log(123); } boo() 2.函数表达式. var boo = function(){ console.log(123) } boo() 现在来说说函数声明提升.还是以例子来说明吧. boo(123) function boo(x){ console.log(x); } 运行后可知,在函数声明中,函数创建前就可以先调用函数. 由于函数声明提升,其…
前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 声明.定义.初始化 声明的意思是宣称一个变量名的存在,定义则为这个变量分配存储空间,初始化则是给该变量名的存储空间赋予初始值: javascript中,变量没有固定类型,其存储空间会随着初始化(并赋值)而变化: <script type="text/javascript"> var a;//声明a console.log(a);//undefined; 只声明,没有赋值,返回und…
function 是 Javascript 中的第一类对象,这就意味着函数可以像其他值一样被传递.一个最常见的用法就是将一个匿名函数作为回调函数传递到另外一个异步函数中. 函数声明 ? 1 function foo() {} 函数 foo 将会在整个程序执行前被 hoist (提升),因此它在定义 foo 函数的整个 scope (作用域)中都是可用的.即使在函数定义之前调用它也没问题.   1 2 foo(); // Works because foo was created before t…
什么是函数? 函数是事件驱动或者被调用时执行的重复代码块. 作用域: 1. 全局作用域 2. 函数作用域(局部作用域) var i = 100; //全局作用域 function fun(){ var j = 10; //局部作用域 console.log(i + j); } fun(); 全局作用域与函数作用域是相对的,比如: i是全局作用域,j和k是函数作用域,而j是k的全局作用域. var i = 100; //全局作用域 function fun(){ var j = 10; //局部作…
this指向问题,谁调用它,它就指谁!!! 1.var foo = 1; function bar() { foo = 10; return; function foo() {} } bar(); alert(foo); A  1 B  10 C  Function D  undefined E   Error 2.var x = 3; var foo = { x: 2, baz: { x: 1, bar: function() { return this.x; } } } var go = f…
[嵌套循环特点]                           外层循环转一次,内层循环转一圈              外层循环控制行数,内层循环控制每行元素个数             [做图形题思路]              1确定图形一共几行  极为外层的循环的次数             2确定每行有几种元素,代表有几个内层循环.             3 确定每种元素的个数,即为每个内层循环的次数                 tips:通常:找出每种元素个数,与行号的关…
js经典试题之数组与函数 1:列举js的全局函数? 答案:JavaScript 中包含以下 7 个全局函数escape( ).eval( ).isFinite( ).isNaN( ).parseFloat( ).parseInt( ).unescape( ). 注意:serTimeout是window的一个方法(window对象的方法),如果把window当做全局对象来看待的话,它就是全局函数.严格来讲,它不是. 2:深复制与浅复制的区别,以及如何实现? 答案: 浅复制只会将对象的各个属性进行依…
我的第一篇博客 ——JS的那些基础概念 第一次写,也不知道有没有什么套路,需不需要注意文采之类的.不管了,我就直接写主要内容吧!下面是我总结的一些关于JS的基础概念: [变量]从字面上面,变量是可变的量:从编程角度讲,变量是用于存储某些/某种数值的存储器.我们可以把变量看作一个盒子用来存储物品. [数组]变量用来存储数据,一个变量只能存储一个内容.如果你想存储多个内容,那么就可以用数组解决,一个数组变量可以存放多个数据,好比一个团,团你有很多人.数组是一个值得集合,每个值都有一个索引号,从0开始…
1.Array类型函数 array.concat(item...) 函数功能:关联数组,实现数组相加功能,但并不影响原先数组,concat返回新数组. array.join(separator) 函数功能:将array中的每个元素用separator为分隔符构造成字符串,默认的separator是逗号,当然你可以自己指定separator 事实上join方法最常用的地方在字符串相加,用过js的人都知道js的字符串相加是特别慢且性能特别差的,把大量片段字符串放在一个数组中并用join方法连接比用+…
先来两个问题 很多时候,在直觉上,我们都会认为JS代码在执行时都是自上而下一行一行执行的,但是实际上,有一种情况会导致这个假设是错误的. a = 2; var a; console.log(a); 按照传统眼光,console.log(a)输出的应该是undefined,因为var a在a = 2之后.但是,输出的是2. 再看第二段代码: console.log(a); var a = 2; 有人会想到第一段代码,然后回答undefined.还有人会认为a在使用前未被声明,因此抛出Referen…
函数声明和变量声明总是会被解释器悄悄地被“提升”到方法体的最顶部 请注意,变量赋值并没有被提升,只是声明被提升了. 函数的声明比变量的声明具有高的优先级. 下面的程序是什么结果? var foo = 1; function bar() { if (!foo) { var foo = 10; } alert(foo); } bar(); 结果是10: 那么下面这个呢? var a = 1; function b() { a = 10; return; function a() {} } b();…
一.变量提升 在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域.变量提升即将变量声明提升到它所在作用域的最开始的部分.上个简历的例子如: 1 2 3 4 5 6 7 8 9 10 console.log(global); // undefined var global = 'global'; console.log(global); // global   function fn () { console.log(a); // un…