25.函数例题-预解析 作用域 、函数变量优先级、全局变量污染(直接在全局声明 、 函数里的变量没声明)但是函数里的变量没声明造成的全局变量污染有个前提,函数要被调用)

1.  return foo()   foo 没有return值,故为undefined.

  2.

     a b 在函数作用域内,外界找不到   var a = b =3; b 也算用var 声明了,只不过b 是在全局隐式var 了一个b ,在函数内部找不到变量的情况下就去全局找,全局找不到报错。

   语法有错误,程序一句都不会执行,执行阶段有错误,会执行没错的代码,在执行出错的地方报错。

 函数或则匿名函数体内声明变量是为了避免全局变量污染

重要例题:

 函数没执行,全局没找到 b报错。没声明 或者没赋值 打印的时候都为undefined,但是没声明与没赋值不同同时出现在一个变量上,同时出现就报错。

 函数执行,b 没声明,会在全局隐式声明并赋值var b =20 放在GO 里,函数AO 消失之后,console.log会从全局里找b ,发现值为20. 函数里的变量没声明会引发全局变量污染。

♥注意:函数里的变量没声明造成的全局变量污染有个前提,函数要被调用

页面关闭 GO 关闭          功能没执行或者执行完了 AO 关闭

    

                                                                        

原文地址:https://www.cnblogs.com/yzdwd/p/12516618.html

时间: 2024-10-12 12:08:15

25.函数例题-预解析 作用域 、函数变量优先级、全局变量污染(直接在全局声明 、 函数里的变量没声明)但是函数里的变量没声明造成的全局变量污染有个前提,函数要被调用)的相关文章

进击JavaScript核心 --- (2)函数和预解析机制

一.函数 每个函数都是 Function类型的实例,也具有属性和方法.由于函数也是一个对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定 1.函数的定义方式 (1).函数声明 function add(a, b) { return a + b; } 函数声明提升:在执行代码之前,会先读取函数声明,也就是说,可以把函数声明放在调用它的代码之后 fn(); // 1 function fn() {console.log(1)} (2).函数表达式 var add = functio

F火狐 不能对 {}括号内的 函数进行预解析

<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>无标题文档</title> <script> // alert(a);// ... alert( fn1 );// F火狐 不能对{}括号内的函数进行预解析 var a = 1

死磕JavaScript变量和函数的预解析

预解析:在解析代码之前做一些处理 预解析做什么处理? 把变量的声明提前了----提前到当前所在的作用域的最上面 函数的声明也会被提前---提前到当前所在的作用域的最上面 那么我们现在开始举几个例子 1.观察下方的第一个红框中的代码,猜猜它的结果是什么? 通过运行我们发现,代码竟然神奇的没有报错?但是输出的也不是下面赋值的1而是undefined,这到底是为什么呢?其实这就是因为js引擎的预解析将num这个变量的声明提前到作用域的最上方(num是全局变量所以提前到最外层也就是script标签内的最

函数_预解析_对象

函数练习: 判断一个数是否是质数 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>这是标题</title> 6 <script> 7 function isPrime(x) { 8 for (var i = 2; i * i <= x; i++) { 9 if (x

JS——变量和函数的预解析、匿名函数、函数传参、return

JS解析过程分为两个阶段:编译阶段.执行阶段.在编译阶段会将函数function的声明和定义都提前,而将变量var的声明提前,并将var定义的变量赋值为undefined. 匿名函数: window.onload = function () { var oBtn01 = document.getElementById('btn01'); var oBtn02 = document.getElementById('btn02'); //注意这里不能有括号,skin01()的话就立刻执行了哦,所以不

关于作用域和预解析的不常见重要知识

作用域和预解析 在javascript中作用域是非常重要的,本文章将会说明作用域,如果有不足的地方希望大家可以评论指出来,自己一定会及时的改正错误,避免大家走入一些误区. 谈及作用域先就必须要说明预解析和词法作用域. 下面我们先说明一下: 预解析 代码在正常执行操作之前会对文档进行一次解析,这个操作就是将声明提升, 声明包括全局范围内  1.带有var的变量, 2.函数 文档预解析后会把文档中在全局函数中的内容储存起来,将全局中带有var的变量(var和变量名,注意:变量体不会随着提升,加载va

JavaScript中作用域和预解析

作用域以及预解析 在javascript中作用域是非常重要的,本文章将会说明作用域以及我们在工作,以及面试中的一些面试题,如果有不足的地方希望大家可以评论指出来,自己一定会及时的改正错误,避免大家走入一些误区. 谈及作用域先就必须要说明预解析和词法作用域. 下面我们先说明一下: 预解析 代码在正常执行操作之前会对文档进行一次解析,这个操作就是将声明提升, 声明包括全局范围内 1.带有var的变量, 2.函数 文档预解析后会把文档中在全局函数中的内容储存起来,将全局中带有var的变量(var和变量

JavaScript作用域问题:预解析、全局与局部作用域解析、作用域链

要想了解JS作用域问题,就要先了解浏览器的JS解析器的工作方式,当浏览器读到script脚本代码时,JS解析器便开始工作.其工作步骤主要分为两部分: JS解析器: 1.“找一些东西”(预解析):var function 参数 例: alert(a); //undefined var a=1; alert(a); //1 function fn1(){alert(2);} JS解析器会先找到var function 参数进行预解析. 找到var定义的变量a时,解析为a = 未定义,不会读取具体值.

JS解析+预解析相关总结

[js预解析机制]先来说说js的解析机制吧,浏览器在解析js代码时是从上到下解析的.解析顺序如:(1)预解析    找var和function (2)逐行代码解析    表达式    函数调用    fn1()函数内部再发生{    (1)预解析    (2)逐行代码解析} 解析:由子级到父级寻找变量,称作用域链 如:函数参数,为局部变量 <script type="text/javascript"> var a=1; function fn1(a){//把a作为参数传进来