关于js语法中的一些难点(预解析,变量提前,作用域)
******标题很吓人************
其实就是一个小小的例子 ,从例子中简单的分析一下作用域、预解析和变量提前的概念
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>关于js中的那些小知识点</title>
</head>
<body>
</body>
<script>
var a=1;
function zero(){
alert(a);
var a=2;
alert(a);
}
zero();
</script>
</html>
你会看到这里的结果第一次弹窗是undefined 第二次是2
也许会有人疑问为什么第一次弹出来不是1 呢?(知道的大神不要喷我)
分析名词:作用域
其实在javascript语言里只有函数是可以提供作用域,换句话说javascript里有且只有函数作用域,没有其他的作用域。因此要理解作用域必须从函数讲起!
那么咱们说一下这个函数的作用域
函数的作用域(其实作用域可以理解为一个箱子,姑且这么理解吧就是一个封闭性的东西 而且很霸道,他可以拿外边人的东西,但是外边的人不能拿 箱子里的东西 想要拿必须经过同意)//xx 好像晦涩难懂
分析名词:预解析(就像c语言一样你写完了代码不能直接运行你要编译一下 这个预解析很类似那个编译的过程)
预解析就是电脑先看一边心里有个数 知道了那个是变量 那个是函数声明 函数中是否有局部变量 等等等等。。。
分析名次:变量提前(顾名思义就是我声明的变量提前到了这个顶部【作用域的顶部】)
咱们用一个例子解释一下变量提前(代码一和代码二的代码作用相似)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>代码一</title>
</head>
<body>
</body>
<script>
function zero(){
alert(a);
var a=2;
}
zero();
</script>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>代码二</title>
</head>
<body>
</body>
<script>
function zero(){
var a;//没有赋值的情况下默认是undefined
alert(a);
}
zero();
</script>
</html>
以上两个代码的作用是相似的也就是代码二就是变量提前的做法
讲了这么多 也该说一下这个例子了
从预解析开始讲解(因为电脑也是先预解析在执行的)
首先 全部变量 声明了一个a=undefined
然后声明了一个函数 zero zero函数中还有一个局部变量a=undefined(到此解析完毕)
然后开始执行 执行的当然是函数了。。。所以我们先看函数
函数中变量的提前请看代码二 于是第一次弹出来就是undefined 弹出来undefined之后变量赋值了(对,你没看错就是赋值了) 那么再次执行的话就是2 (为什么不是1 因为函数中自己有变量啊 于是就覆盖了全局变量)
举个例子说明 : 你要炒鸡蛋 你发现你的家中有鸡蛋 于是你就不会去买了 或者拿别人的了吧(不要钻牛角 说鸡蛋不够用啊)
终于写完了 休息一下
ps:写的比较浅 希望大家能多多指点。。。
关于js语法中的一些难点(预解析,变量提前,作用域)的更多相关文章
- thinkphp遇到的小问题,js文件中U方法不被解析
我想在js文件中写ajax, 写完发现异常, 本以为是js文件中不支持ajax 后来发现时地址解析错误. 也就是U方法在js文件中不被解析. 貌似thinkphp解析,tpl文件中的一些元素. js文 ...
- js高程读书笔记(第4章--变量、作用域和内存)
JavaScript变量松散类型的本质,决定了它只是在特定时间用于保存特定值的一个名字而已.由于不存在定义某个变量必须要保存何总数据类型值的规则,变量的值及其数据类型可以在脚本的生命周期内改变. 1. ...
- js正则表达式中的正向肯定预查和正向否定预查
对于没有使用过这几个表达式的人,应该对这个概念都有点不太理解,下面就以实际例子说明这几个表达式的用户. 一.?:pattern——匹配检验:会作为匹配校验,是一个非获取匹配,并出现在匹配字符结果里面, ...
- js语法中一些容易被忽略,但会造成严重后果的细节
一.复杂数据类型-“对象”的地址引用方式,不理解清楚,会出大乱子 复习一下基础概念(老司机略过): JS的数据可以分为简单类型(数字.字符串.布尔值.null和undefined)和 复杂数据类型(对 ...
- 【坑】js语法中一些小细节 不注意也出坑 随笔记下 留待后查
1.switch case内 区分数字 与 字符 ',bl; switch(+lv){ :bl = 1.7;break; :bl = 1.55;break; :bl = 1.4;break; ; } ...
- 2 —— js语法 —— 对象和方法的声明 。变量提升。闭包
一,声明对象 var obj1 = {}; var obj2 = {name:'kk',age:18,fun:function{ // name,age,fun为对象的属性,只是属性 ...
- JavaScript 中的匿名函数((function() {})();)与变量的作用域
以前都是直接用前端框架Bootstrap,突然想看看Javascript,发现javascript是个非常有趣的东西,这里把刚碰到的一个小问题的理解做下笔录(废话不多说,上代码). /** * Exa ...
- JavaScript (四) js的基本语法 - - 函数练习、arguments、函数定义、作用域、预解析
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.函数练习 1.求最值 // - 求2个数中的最大值 function getMax(num1, nu ...
- JS基础语法---预解析
预解析:就是在解析代码之前 1. 预解析做什么事? 把变量的声明提前了----提前到当前所在的作用域的最上面 函数的声明也会被提前---提前到当前所在的作用域的最上面 举例: function ...
随机推荐
- ios中调用WCF
例子比较简单 记录下思路 1.接口中定义 实体和方法声明 //登录信息 [OperationContract] [WebInvoke(UriTemplate = " ...
- JavaScrip book
1.<JavaScript: The Good Parts>中文版:<JavaScript语言精粹>2.<Professional JavaScript for Web ...
- Winform打砖块游戏制作step by step第4节---小球移动
一 引子 为了让更多的编程初学者,轻松愉快地掌握面向对象的思考方法,对象继承和多态的妙用,故推出此系列随笔,还望大家多多支持. 预备知识,无GDI画图基础的童鞋请先阅读一篇文章让你彻底弄懂WinFor ...
- jquery 遍历取值问题
方法一:将a定义在外边 var a = new Array; var i = 0 ; $("img").each(function(){ a[i] = $(this).attr(& ...
- 理解Hbase RowKey的字典排序;HBase Rowkey的散列与预分区设计
HBase是三维有序存储的,是指rowkey(行键),column key(column family和qualifier)和TimeStamp(时间戳)这个三个维度是依照ASCII码表排序的. HB ...
- Tomcat Deployment failure ,locked one or more files
在用Eclipse+Tomcat配置J2EE项目时,出现如下提示错误: Undeployment Failure could not be redeployed because it could no ...
- zabbix agent监控主机配置
zabbix agent监控主机配置 环境说明 系统版本 CentOS 7.2 x86_64 软件版本 zabbix 3.0.18 1.监控zabbix服务器端 1.1 安装zabbi ...
- 使用终端shell命令批量改动一个文件下的全部文件的读写权限
之前对openfire安装的目录就遇到过这个问题,今天再次遇到.须要改动一个目录以下的全部子目录以及文件的三个权限:本用户读写.管理员读写.全部人读写,三个都要需改为wr 步骤例如以下:比如我要改动/ ...
- 系统封装 如何为原生PE集成软件
1 我们首先集成Explorer.老外的BSExplorer比较好用,下载之后得到这些文件,不算太大. 2 这里需要注意,前一章讲解如何打造原生PE已经制作成了ISO,这里想要集成软件还需要回到刚 ...
- Mysql性能测试诊断
mysql> showglobal status; 可以列出mysql服务器运行各种状态值,另外,查询mysql服务器配置信息语句: mysql> showvariables; 一.慢查询 ...