首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JS if 中函数声明提升

可以看到, 给a赋值5, 并没有赋值到全局变量a上 解决 先看看MDN里说明 ? 从ES6开始 在严格模式下,块里函数作用域为这个块。ES6之前不建议块级函数在严格模式下使用....在ES6非严格模式下, 块中函数声明会出现提升, 所以最好使用函数表达式来定义函数 ---- 走走流程看看到底发生了啥 我们可以先把, function a () {}注释掉, 可以看到报错了, Uncaught...ReferenceError: a is not defined, 所以if里函数声明确实存在变量提升 ?...然后, 我们可以打点调试一下 在if 中a=1语句之前, 我们可以看到函数声明已经提升了, 此时if作用域里a为函数 ? 而全局a还是undefined ?...随后运行a=5, 则只是在块级作用域里赋值, 不会对全局作用域a值进行修改 ---- 当然, 如果使用函数表达式来声明函数的话, 可以避免 var a if (true) { console.log

3.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    js函数声明你真的会了吗???

    答案:undefined 30 报错:b is not defined 解析:1、没有用var声明是全局变量,即便在函数内部; 2、只有在function内部新声明才是局部变量,在if,while,...for等声明变量其实是全局变量(除非本身在function内部) 3、因为变量提升,虽然if块内容没执行,但是预解析阶段会执行var a,只是没有赋值而已,因此打印a是undefined而打印b会报错...在任何时代, 教育说起来都是一件高大上事, 但却没有什么真正有价值东西是教得会, 没有任何一种文化模因 可以说清楚一个个体全部问题。...在任何时代, 在一秒钟内看到本质的人, 和花半辈子看不清的人, 自然是不一样命运。 每一天,你将受到才哥理论,结合历史、政治、文化、艺术、商业故事,令人防不胜防高纯度无死角知识轰炸。...那时候相忘于江湖事,或许穿越了时光,有了新世界 那时候不远万里追寻的梦,也许穿行过人海,也有了新意义 而对于我们来说,那个惦念江湖,那个执着梦,其核心都是在偌大世界里,寻找到更真实更好自己

    1.6K20

    js中构造函数和普通函数区别_函数声明函数定义

    大家好,又见面了,我是你们朋友全栈君。 1、构造函数也是一个普通函数,创建方式和普通函数一样,但构造函数习惯上首字母大写 2、构造函数和普通函数区别在于:调用方式不一样。...作用也不一样(构造函数用来新建实例对象) 3、调用方式不一样。 a....普通函数调用方式:直接调用 person(); b.构造函数调用方式:需要使用new关键字来调用 new Person(); 4、构造函数函数名与类名相同:Person( ) 这个构造函数...A、立刻在堆内存中创建一个新对象 B、将新建对象设置为函数this C、逐个执行函数代码 D、将新建对象作为返回值 6、普通函数例子...,是则返回true; 所有对象都是Object对象后代,所以任何对象和Object做instanceof都会返回true 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

    3.2K10

    JS 声明

    用 var 声明变量作用域是它当前执行上下文,它可以是嵌套函数,也可以是声明在任何函数变量。如果你重新声明一个 JavaScript 变量,它将不会丢失其值。...简而言之, var声明变量只能是全局或者整个函数。 将赋值给未声明变量值在执行赋值时将其隐式地创建为全局变量(它将成为全局对象属性)。...“hoisting”就像是把所有的变量声明移动到函数或者全局代码开头位置。...作用域规则 let声明变量只在其声明块或子块中可用,这一点,与var相似。二者之间最主要区别在于var声明变量作用域是整个封闭函数。...console.log(a); // 11 console.log(b); // 22 } console.log(a); // 11 console.log(b); // 2 而这种var 与 let合并声明方式会报

    2.5K10

    JS函数声明函数表达式异同

    相同点 注:函数声明函数表达式相同点包括但不限于以下几点 函数是一个值,所以和其他值一样,函数也可以进行被输出、被赋值、作为参数传给其他函数等相关操作,不管函数是以什么方式被定义,当然和其他值输出还是有些区别的...不同点 注:函数声明函数表达式不同点包括但不限于以下几点 相对函数声明函数表达式之间相同点,它们不同点更应该值得我们关注。下面我结合自己理解聊聊。...-- function body --> } 函数声明会提前 函数声明是在预执行期执行,就是说函数声明是在浏览器准备执行代码时候执行。...; })() 事实上,js解析器对函数声明函数表达式并不是一视同仁地对待。...对于函数声明js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如同定义其它基本类型变量一样,只在执行到某一句时也会对其进行解析,所以在实际中,它们还是会有差异,具体表现在,

    1.2K50

    JavaScript(js函数声明函数表达式区别

    在JavaScript中,函数是经常用到,在实际开发时候,我想很多人都没有太在意函数声明函数表达式区别,但是呢,这种细节东西对于学好js是非常重要。...函数声明函数表达式用代码写出来是这样: //函数声明 function say(){ console.log("函数声明") } //函数表达式 var say1 = function(){...console.log("函数表达式") } 那我们来看看,这两种方式到底有什么不同呢?...首先,在函数调用方面,看下面的代码 say(); //函数声明 function say(){ console.log("函数声明") } 这样执行结果是什么呢?...一起来看看,首先我们先说第一种,函数声明调用,函数声明调用这个其实不用讲你就知道,函数声明了嘛,哪里都可以调用(function会有预解析,预解析之后函数就存在了,所以那里都能调用它了)。

    81230

    JS函数声明函数表达式不同

    Js函数声明是指下面的形式: function functionName(){ }         这样方式声明一个函数,而函数表达式则是类似表达式那样来声明一个函数,如: var functionName...= function(){ }         可能很多朋友在看到这两一种写法时会产生疑惑,这两种写法差不多,在应用中貌似也都是可行,那他们有什么差别呢?       ...事实上,js解析器对函数声明函数表达式并不是一视同仁地对待。...对于函数声明js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如同定义其它基本类型变量一样,只在执行到某一句时也会对其进行解析,所以在实际中,它们还是会有差异,具体表现在,...当使用函数声明形式来定义函数时,可将调用语句写在函数声明之前,而后者,这样做的话会报错。

    1.4K20

    函数(三)(函数声明

    函数声明 C语言函数调用要求是先定义后使用,就是要求被调用函数定义在主调函数之前。 如果在程序中自定义函数时,需要将被调函数定义在主调函数后面,就需要函数调用之前加上函数原型声明。...如果在函数调用之前既无函数定义,也无函数声明,编译时会出错。 函数原型声明一般形式: 类型说明符 函数名(形式参数声明列表); 例:定义计算圆面积函数,在主函数中输入半径并计算面积。...return ; } double circle(double radius) { return PI * radius * radius; } 函数声明函数名后面的圆括号中可以只给出形参类型...,省略形参名称。...例如本例中第5行函数声明可以写成如下形式: double circle(double); 如果在源程序文件开头部分,所有函数定义前面进行函数声明,则该源程序文件中所有的函数都可以调用被声明函数

    64910

    JS函数表达式和函数声明你混淆了吗?

    在 JavaScript 中,function关键字可以完成一个简单工作:创建一个函数。 但是,使用关键字定义函数方式可以创建具有不同属性函数。...其原因是sumA是使用函数声明创建,该函数声明在当前作用域中创建一个函数变量(具有与函数名称相同名称)。...例如,编写一个函数 sumArray(array),以递归方式累加一个数组项(该数组可以包含数字或其他数组): sumArray([10, [1, [5]]]); // => 16 function...由于提升,函数变量在函数声明之前可用。 2.1 函数声明注意事项 函数声明语法作用是创建独立函数函数声明应在全局作用域内,或直接在其他函数作用域内: // Good!...总结 根据使用function关键字创建函数方式,可以通过两种方法来创建函数函数声明函数表达式。

    74430

    JS 匿名函数——几种不同调用方式

    匿名函数声明和使用 匿名函数有两种用法: 赋值 自我执行 1.声明一个匿名函数,直接赋值给某一个事件 windon.onload = function(){ alert('...,函数调用语句,必须放在函数声明语句之后!!!...原因:检查装载时,会先对show变量及这个匿名函数声明,此时,还未将匿名函数赋值给show变量,如果在表达式之前调用,会报错 show is not a function js代码执行顺序问题 js...检查装载阶段:会先检测代码语法错误,进行变量、函数声明 执行阶段:变量赋值、函数调用等,都属于执行阶段。 3.自执行函数。这里我总结了8种常用匿名函数调用方法: //1.使用 !...function(){ document.write('ni hao'); }() //2.无法表明函数与之后()整体性,不推荐使用。

    4.1K10

    javascript两种声明函数方式一次深入解析

    声明函数方式 javascript有两种声明函数方式,一个是函数表达式定义函数,也就是我们说匿名函数方式,一个是函数语句定义函数,下面看代码: /*方式一*/ var FUNCTION_NAME...方式声明方式是先声明后使用 方式声明方式可以先调用,后声明 /*方式一: *先声明后使用 */ //f1();这里调用就会出错 var f1 = function () {...*/}; /* 这种方式,编译后变量声明 FUNCTION_NAME 会“被提前”了,但是他赋值(也就是FUNCTION_BODY)并不会被提前。...即函数声明过程在整个程序执行之前预处理就完成了,所以只要处于同一个作用域,就可以访问到,即使在定义之前调用它也可以。...alert (‘2’);主要原因是JavaScript 函数声明“提前”行为,简而言之,就是Javascript允许我们在变量和函数声明之前使用它们,而第二个定义覆盖了第一种定义。

    50820

    JS高级原型以及函数调用方式

    JavaScript 高级 目标 原型 ==函数原型链== 函数和对象原型链关系 函数4种调用方式 箭头函数 2.原型 prototype -重点 原型上存放函数 解决了同一个 say 浪费 内存问题...原型本质是一个对象,理解为 JavaScript 自动帮我们添加,只要是构造函数,系统会默认为构造函数关联一个对象,这个对象就称为构造函数原型,写在原型中成员,可以被构造函数所创建实例调用 原型是...4.原型关系 构造函数、实例、原型三者之间关系 构造函数:构造函数就是一个函数,配合new可以新建对象。 实例:通过构造函数实例化出来对象我们把它叫做构造函数实例。...num1 = 22;//局部变量 console.log(num); // 全局变量在任何地方都能访问到 console.log(num1); } console.log(num); 在js...变量搜索原则: 从当前作用域开始查找是否声明了该变量,如果存在,那么就直接返回这个变量值。 如果不存在,就会往上一层作用域查询,如果存在,就返回。

    9610
    领券