首页
学习
活动
专区
工具
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函数声明与函数表达式的异同

    这里就涉及到了函数的传递,函数的传递是传引用,就是说函数存在内存的某个位置,nameAlert和anotherNameAlert是都是函数的一个引用,把函数名nameAlert赋值给anotherNameAlert...-- function body --> } 函数声明会提前 函数声明是在预执行期执行的,就是说函数声明是在浏览器准备执行代码的时候执行的。....'); } ECMAScript规范中表示,函数声明语句可以出现在全局代码,或者内嵌在其他函数,但是不能出现在循环、条件判、或者try/finally以及with语句中。...; })() 事实上,js的解析器对函数声明与函数表达式并不是一视同仁地对待的。...对于函数声明js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如同定义其它基本类型的变量一样,只在执行到某一句时也会对其进行解析,所以在实际,它们还是会有差异的,具体表现在,

    1.2K50

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

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

    1.4K20

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

    但是sumB是使用函数表达式创建的(将其包装在括号),该函数表达式不会在当前作用域内创建函数变量。 如果你想访问使用函数表达式创建的函数,那么将函数对象保存到一个变量: // Works!...2.函数声明 在前面的示例已经看到的,sumA是一个函数声明: // Function declaration function sumA(a, b) { return a + b; } sumA...(4, 5); // => 9 当一个语句包含function关键字,后跟函数名称,一对带参数的括号(param1, param2, paramN)以及包围在一对花括号{}的函数主体时,就会发生函数声明...函数声明会创建一个函数变量:一个与函数名称同名的变量(例如,上一个示例的sumA)。 在当前作用域中(在函数声明之前和之后),甚至在函数作用域本身内,都可以访问该函数变量。...: 如果表达式的函数没有名称,例如 function(){return 42},那是一个匿名函数表达式 如果函数具有名称,例如 上一个示例的sumB和回调,那么这是一个命名函数表达式 3.1 函数表达式的注意事项

    73930

    10个JavaScript难点

    由于外部函数f1已经执行完毕,其内部变量N应该在内存中被清除,然而事实并不是这样:我们每次调用result的时候,发现变量N一直在内存,并且在累加。为什么呢?这就是闭包的神奇之处了! 3....这时,可以使用立即执行函数来实现模块化,正如很多JS库比如jQuery以及我们Fundebug都是这样实现的。...因此我们可以先使用变量和函数,而后声明它们。 但是,仅仅是变量声明被提升了,而变量赋值不会被提升。...(y); // 输出undefined y = 2; // 初始化y 为了避免BUG,开发者应该在每个作用域开始时声明变量和函数。...柯化 柯化,即Currying,可以是函数变得更加灵活。我们可以一次性传入多个参数调用它;也可以只传入一部分参数来调用它,让它返回一个函数去处理剩下的参数。

    76750

    JS基础测试: I love China字符串China字符是否存在,以及它在字符串的起始位置,需要使用以下哪个方法?

    考核内容: js基础字符串操作 题发散度: ★★★ 试题难度: ★★★ 解题思路: indexOf() 方法有以下四种形式: 1.public int indexOf(int ch): 返回指定字符在字符串第一次出现处的索引...,如果此字符串没有这样的字符,则返回 -1。...2.public int indexOf(int ch, int fromIndex): 返回从 fromIndex 位置开始查找指定字符在字符串第一次出现处的索引,如果此字符串没有这样的字符,则返回...3.int indexOf(String str): 返回指定字符在字符串第一次出现处的索引,如果此字符串没有这样的字符,则返回 -1。..."I love China".indexOf('China')

    1.5K10

    Vue学习笔记之Vue学习前的准备工作

    2.不要用任何的构建项目工具,只用最简单的,把教程的例子模仿一遍,理解用法。不推荐上来就直接用 vue-cli 构建项目,尤其是如果没有 Node/Webpack 基础。...5 }; 6 } 7 a[6](); 上面代码,变量i是var命令声明的,在全局范围内都有效,所以全局只有一个变量i。...(let i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[6](); 上面代码,变量i是let声明的...这种现象多多少少是有些奇怪的,按照一般的逻辑,变量应该在声明语句之后才可以使用。 为了纠正这种现象,let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错。...var s = 'hello'; for (var i = 0; i < s.length; i++) { console.log(s[i]); } console.log(i); // 5 上面代码

    51630

    JS逆向之猪场某游

    声明:本文仅供技术交流,切忌非法使用。 今天我们要抓取的是猪场某游收藏总榜的信息。 ? 下图是收藏榜总榜的部分商品,一看这金额???果然是有钱人玩的游戏啊,到底是什么样的属性能让其价值连城?...我们从网页源代码能清楚地看到价格的显示,根据英文猜测,具体的信息应该在这个"equip_desc",这一串字符串应该是加密之后的装备信息。 ? 那么任务就是来解决这个加密的破解。...看来解密的源头应该在这个js文件,也就是util.js。我们打开这个js文件来进行分析。 打上断点之后发现这个decode_desc指的就是g函数 ? 那么g函数是什么样的呢? ?...: r=requests.get(self.url.format(i),headers=self.headers) js=re.findall(r"var data =...: js=self.get_json(i) equip_list=js["equip_list"] for equip in equip_list:

    85910

    写给前端专家的一封公开信:关于分号(翻译)

    很喜欢你的代码风格: 你把逗号放在行首,与上一行 var 的 r 对齐,或者与上一行的 [ 和 { 对齐。...但是我不是很敢学的你风格,因为很多 JS 教材都说 JS 解释器的自动加分号机制会对代码有影响。 如果我不把逗号放在行尾,而是放在下一行行首,在浏览器是否安全呢?...我们在 JSON 经常用到类似的断句方式,在一个 var 语句声明多个变量时也会用 , 来断句。 第二条就比较奇怪。...假设我们写 i\n++\nj,结果得到的是 i; ++j,却不是 i++; j。 第三条很好理解。if (x)\n y() 会被认为是 if (x) {y()}。...一些主观的、可能会冒犯你的话 如果你不了解 JS 的断句机制,那么你就对 JS 掌握的不太好,也不应该在没有指导的情况下写 JS,而且你也不应该指导任何人写 JS。 我猜我已经冒犯到你了。

    77170
    领券