******标题很吓人************

其实就是一个小小的例子 ,从例子中简单的分析一下作用域、预解析和变量提前的概念

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <title>关于js中的那些小知识点</title>
  6. </head>
  7. <body>
  8. </body>
  9. <script>
  10. var a=1;
  11. function zero(){
  12. alert(a);
  13. var a=2;
  14. alert(a);
  15. }
  16. zero();
  17. </script>
  18. </html>

你会看到这里的结果第一次弹窗是undefined  第二次是2

也许会有人疑问为什么第一次弹出来不是1 呢?(知道的大神不要喷我)

分析名词:作用域

其实在javascript语言里只有函数是可以提供作用域,换句话说javascript里有且只有函数作用域,没有其他的作用域。因此要理解作用域必须从函数讲起!

那么咱们说一下这个函数的作用域

函数的作用域(其实作用域可以理解为一个箱子,姑且这么理解吧就是一个封闭性的东西 而且很霸道,他可以拿外边人的东西,但是外边的人不能拿 箱子里的东西 想要拿必须经过同意)//xx 好像晦涩难懂

分析名词:预解析(就像c语言一样你写完了代码不能直接运行你要编译一下  这个预解析很类似那个编译的过程)

预解析就是电脑先看一边心里有个数 知道了那个是变量 那个是函数声明 函数中是否有局部变量 等等等等。。。

分析名次:变量提前(顾名思义就是我声明的变量提前到了这个顶部【作用域的顶部】)

咱们用一个例子解释一下变量提前(代码一和代码二的代码作用相似)

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <title>代码一</title>
  6. </head>
  7. <body>
  8. </body>
  9. <script>
  10. function zero(){
  11. alert(a);
  12. var a=2;
  13. }
  14. zero();
  15. </script>
  16. </html>
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <title>代码二</title>
  6. </head>
  7. <body>
  8. </body>
  9. <script>
  10. function zero(){
  11. var a;//没有赋值的情况下默认是undefined
  12. alert(a);
  13. }
  14. zero();
  15. </script>
  16. </html>

以上两个代码的作用是相似的也就是代码二就是变量提前的做法

讲了这么多 也该说一下这个例子了

从预解析开始讲解(因为电脑也是先预解析在执行的)

首先 全部变量 声明了一个a=undefined

然后声明了一个函数 zero  zero函数中还有一个局部变量a=undefined(到此解析完毕)

然后开始执行  执行的当然是函数了。。。所以我们先看函数

函数中变量的提前请看代码二  于是第一次弹出来就是undefined    弹出来undefined之后变量赋值了(对,你没看错就是赋值了) 那么再次执行的话就是2 (为什么不是1 因为函数中自己有变量啊 于是就覆盖了全局变量)

举个例子说明 : 你要炒鸡蛋 你发现你的家中有鸡蛋 于是你就不会去买了 或者拿别人的了吧(不要钻牛角 说鸡蛋不够用啊)

终于写完了    休息一下

ps:写的比较浅  希望大家能多多指点。。。

关于js语法中的一些难点(预解析,变量提前,作用域)的更多相关文章

  1. thinkphp遇到的小问题,js文件中U方法不被解析

    我想在js文件中写ajax, 写完发现异常, 本以为是js文件中不支持ajax 后来发现时地址解析错误. 也就是U方法在js文件中不被解析. 貌似thinkphp解析,tpl文件中的一些元素. js文 ...

  2. js高程读书笔记(第4章--变量、作用域和内存)

    JavaScript变量松散类型的本质,决定了它只是在特定时间用于保存特定值的一个名字而已.由于不存在定义某个变量必须要保存何总数据类型值的规则,变量的值及其数据类型可以在脚本的生命周期内改变. 1. ...

  3. js正则表达式中的正向肯定预查和正向否定预查

    对于没有使用过这几个表达式的人,应该对这个概念都有点不太理解,下面就以实际例子说明这几个表达式的用户. 一.?:pattern——匹配检验:会作为匹配校验,是一个非获取匹配,并出现在匹配字符结果里面, ...

  4. js语法中一些容易被忽略,但会造成严重后果的细节

    一.复杂数据类型-“对象”的地址引用方式,不理解清楚,会出大乱子 复习一下基础概念(老司机略过): JS的数据可以分为简单类型(数字.字符串.布尔值.null和undefined)和 复杂数据类型(对 ...

  5. 【坑】js语法中一些小细节 不注意也出坑 随笔记下 留待后查

    1.switch case内 区分数字 与 字符 ',bl; switch(+lv){ :bl = 1.7;break; :bl = 1.55;break; :bl = 1.4;break; ; } ...

  6. 2 —— js语法 —— 对象和方法的声明 。变量提升。闭包

    一,声明对象 var obj1 = {}; var obj2 = {name:'kk',age:18,fun:function{          // name,age,fun为对象的属性,只是属性 ...

  7. JavaScript 中的匿名函数((function() {})();)与变量的作用域

    以前都是直接用前端框架Bootstrap,突然想看看Javascript,发现javascript是个非常有趣的东西,这里把刚碰到的一个小问题的理解做下笔录(废话不多说,上代码). /** * Exa ...

  8. JavaScript (四) js的基本语法 - - 函数练习、arguments、函数定义、作用域、预解析

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.函数练习 1.求最值 // - 求2个数中的最大值 function getMax(num1, nu ...

  9. JS基础语法---预解析

    预解析:就是在解析代码之前   1. 预解析做什么事? 把变量的声明提前了----提前到当前所在的作用域的最上面 函数的声明也会被提前---提前到当前所在的作用域的最上面   举例: function ...

随机推荐

  1. 项目中的.Net

    一.@符号的妙用 1.字符串转义符     源:'\'在C#中是特殊符号,表示转义字符,所有要表示普通字符串'\',则需要用'\\',通过@符号,可以实现'\'当做普通字符使用,如下:     str ...

  2. The newly created daemon process has a different context than expected

    Error: The newly created daemon process has a different context than expected. It won't be possible ...

  3. [置顶] kubernetes-kubectl命令说明

    kubectl kubectl controls the K8S cluster manager. Find more information at https://github.com/K8S/K8 ...

  4. A folder failed to be renamed or moved--安装Android SDK的问题

    对于Android是一直想学却一直未学,行动跟不上想法.现在,终于付诸于行动了. 首先,我找的第一个Android的资料是大话企业级Android,前阵子刚看完大话设计模式,通俗易懂,还是比较喜欢这一 ...

  5. ylbtech-WelfareSystem(福利发放管理系统)-数据库设计

    ylbtech-DatabaseDesgin:ylbtech-WelfareSystem(福利发放管理系统)-数据库设计 1.A,数据库关系图(Database Diagram) 1.B,数据库设计脚 ...

  6. Linux下查找、删除、替换命令

    查看某目录下所有文件的个数: [root@localhost1 opt]# ls -l |grep "^-"|wc -l 查看某目录下所有文件的个数,包括子目录里面的: [root ...

  7. HDOJ 3359 Kind of a Blur

    用高斯消元对高斯模糊的图像还原.... Kind of a Blur Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/327 ...

  8. ECSHOP筛选属性修改title标题

    发现百度蜘蛛爬行网站时会爬行属性链接,而且会进行收录.可是ecshop系统制作的网站,在分类页点击属性筛选出产品时,网页title不会改变.这样就会造成大量title一样的页面,不利于优化.为此,在网 ...

  9. 小tip: base64:URL背景图片与web页面性能优化

    转自:http://www.zhangxinxu.com/wordpress/?p=2341 一.base64百科 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP ...

  10. hibernate学习系列-----(2)hibernate核心接口和工作机制

    在上一篇文章hibernate学习系列-----(1)开发环境搭建中,大致总结了hibernate的开发环境的搭建步骤,今天,我们继续了解有关hibernate的知识,先说说这篇文章的主要内容吧: C ...