函数声明提升机制在浏览器中的bug

JavaScript 解释器中存在一种变量声明被提升(hoisting)的机制,也就是说变量(函数)的声明会被提升到作用域的最前面,即使写代码的时候是写在最后面,也还是会被提升至最前面

但通过测试,发现该机制在浏览期间存在差异:

时间: 2024-10-10 23:15:31

函数声明提升机制在浏览器中的bug的相关文章

深入理解变量声明提升和函数声明提升

变量声明提升 1.变量定义 可以使用var定义变量,变量如果没有赋值,那变量的初始值为undefined. 2.变量作用域 变量作用域指变量起作用的范围.变量分为全局变量和局部变量.全局变量在全局都拥有定义:而局部变量只能在函数内有效. 在函数体内,同名的局部变量或者参数的优先级会高于全局变量.也就是说,如果函数内存在和全局变量同名的局部变量或者参数,那么全局变量将会被局部变量覆盖. 所有不使用var定义的变量都视为全局变量 3.函数作用域和声明提前 JavaScript的函数作用是指在函数内声

JavaScript函数声明提升

首先,JavaScript中函数有两种创建方式,即函数声明.函数表达式两种. 1.函数声明. function boo(){ console.log(123); } boo() 2.函数表达式. var boo = function(){ console.log(123) } boo() 现在来说说函数声明提升.还是以例子来说明吧. boo(123) function boo(x){ console.log(x); // 123 } 运行后可知,在函数声明中,函数创建前就可以先调用函数. 由于函

JS执行顺序-函数声明提升、匿名函数、函数表达式

大方向上: JS 是按照 代码块 进行 编译.执行 的. 学习至: 1.变量声明提升 2.新唐的博客 3.js中匿名函数的创建与调用方法分析 4.前端圣经 - 高程三 5.深入理解变量声明提升和函数声明提升 因为没有好好地分类.可能会比较杂.为了系统地学习,先了解几个概念. 一. <script> 区分的代码块. JS是按照代码块 编译 和 执行的.代码块间 相互独立,但是 变量和方法 共享. <script> alert('代码块一'); </script> <

JavaScript 函数声明与函数表达式的区别 函数声明提升(function declaration hoisting)

解析器在向执行环境中加载数据时,对函数声明和函数表达式并非一视同仁.解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问).至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真的被解释执行.例子: alert (sum(10,10)); function sum (num1, num2) { return num1 + num2; } 以上代码完全可以正常运行.因为在代码开始执行之前,解析器就已经通过一一个名为函数声明提升(function declaration hoist

javascript函数篇三、函数声明提升

变量提升想必大家都比较熟悉了,那么什么是函数声明提升呢?首先我们来了解下常用的两种函数定义方式: 1. 函数声明 2. 函数表达式 下面来看下两种方式定义函数.函数声明语法定义函数 function fn (n) { return n * 2 } 函数表达式定义函数 var fn = function (n) { return n * 2 } *那么两种方式定义函数有什么区别呢?***对于函数声明与函数表达式两种定义函数的方式,解析器会率先读取函数声明,并使其在执行任何代码之前可用,*这个过程叫

变量声明和函数声明提升,及有关的面试题

var getName = function(){ console.log(2); } function getName (){ console.log(1); } getName(); 上面输出结果为2 function getName(){ //函数声明提升到顶部 console.log(1); } var getName; //变量声明提升 getName = function(){ //变量赋值依然保留在原来的位置 console.log(2); } getName(); // 最终输出

浅谈JS变量声明和函数声明提升

先来两个问题 很多时候,在直觉上,我们都会认为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

JS变量与函数声明提升补充

1.默认情况下,函数声明的优先级高于变量声明的优先级:一旦变量被赋值,不会被函数声明覆盖 var a; function a() { console.log('a'); } var b = 1; function b() { console.log('b'); } console.log(a);//function a console.log(b);//b 2.命名函数表达式的标示符(即函数名称)在外部作用域是无效的 var f = function foo(){ return typeof f

javascript变量声明与函数声明提升

在JavaScript中,在声明变量或者函数前就使用变量或者函数,会产生以外的错误.这些在很多JS的笔试题中都会出现. 先看下面这道题: 1 (function( ) { 2 var x = foo( ); 3 var foo = function foo( ){ 4 return "foobar" : 5 } 6 return x; 7 })( );问:上面函数的返回值是() A.类型错误B.foobarC.undefinedD.foo( )答案应该选A,而不是D.说到这原因大家应该