JavaScript中---作用域
作用域:
变量还有函数作用的范围。
浏览器的内核主要有两大功能,一个是渲染页面,另一个就是我们的JavaScript的解释器了。
我们主要来说说JavaScript解释器,在解析时是怎么样的工作原理。
在解析的时候,首先会发生预解析,就是说不会直接一行一行去执行我们所写的代码,它会先去找有哪些声明的变量,遇见函数体的时候会把函数放到最上面的位置,当变量名和函数名重名的时候函数会替代变量声明。
在解析的时候碰到的是个函数体,那么会预先处理函数体中的变量或者函数,知道有哪些声明的事项。
如果是变量,那么在函数体中调用变量时,会取函数体当中的变量,如果函数体中没有,则找外层变量
函数预解析:
会将函数提到顶部
变量预解析:
会内部事先知道是否有该变量,但不会改变解析位置
当预解析时,变量和函数出现同名时,函数会替代掉变量,同一个命名只会存在一个
全局作用域 - 在任何地方都能访问
函数外定义的变量拥有全局作用域
不使用var定义的变量拥有全局作用域
所有window对象上的属性拥有全局作用域
局部作用域 - 只能在函数内部访问
使用var在函数内部定义的变量拥有局部作用域
全局:在任何地方都能调用
局部:只在当前作用范围(功能体)能调用
<script>
var a = 10;// 全局
function fn() {
console.log(a);//undefined
var a = 5;// 局部
console.log(a);//
}
fn(); </script>
闭包的概念
函数嵌套函数,内层函数可以访问外层函数中的变量
<script>
function fn1() {
var a = 1;
function fn2() {
a++;
console.log(a);
return a;
}
fn2();
}
fn1();
</script>
闭包的做大用处有两个:
一个是在函数体外部读取i内部的变量,另一个就是让这些变量始终保存在内存中。
JavaScript中---作用域的更多相关文章
- 从零开始讲解JavaScript中作用域链的概念及用途
从零开始讲解JavaScript中作用域链的概念及用途 引言 正文 一.执行环境 二.作用域链 三.块级作用域 四.其他情况 五.总结 结束语 引言 先点赞,再看博客,顺手可以点个关注. 微信公众号搜 ...
- JavaScript中作用域和作用域链的简单理解(变量提升)
通过阅读<JS高级程序设计>这本书,对js中的作用域和作用域链知识有了初步的了解和认识,准备成笔记供大家参考,笔记中字数比较多,但个人认为叙述的挺详细的,所以希望读者耐心看.再者,本人了解 ...
- JavaScript中作用域回顾(避免使用全局变量)(瀑布流的实现)(scroll事件)以及Django自定义模板函数回顾
页面显示照片样式为瀑布流: 上面的div个数可以按照自己安排进行划分.img的分布可以使用模板标签以及自定义模板函数进行排布: 自定义模板函数实现可以看,最后几列:python---django中模板 ...
- 理解JavaScript中作用域链的关系
javascript里的关系又多又乱.作用域链是一种单向的链式关系,还算简单清晰:this机制的调用关系,稍微有些复杂:而关于原型,则是prototype.proto和constructor的三角关系 ...
- javascript中作用域
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JavaScript中作用域和作用域链解析
学习js,肯定要学习作用域,js作用域和其他的主流语言的作用域还存在很大的区别. 一.js没有块级作用域. js没有块级作用域,就像这样: if(){ : console.log(a) //输出100 ...
- javascript中的作用域与作用域链
前几天,在写一段js代码时,出现了一些问题,调了很长时间也没有调通,其原因是,我在处理变量的作用域时错误地沿用了C++的作用域机制.因此我回炉了一次. 如果你使用过C++或java等一系列的面向对象的 ...
- javascript中的this与函数讲解
前言 javascript中没有块级作用域(es6以前),javascript中作用域分为函数作用域和全局作用域.并且,大家可以认为全局作用域其实就是Window函数的函数作用域,我们编写的js代码, ...
- Javascript的作用域、作用域链以及闭包
一.javascript中的作用域 ①全局变量-函数体外部进行声明 ②局部变量-函数体内部进行声明 1)函数级作用域 javascript语言中局部变量不同于C#.Java等高级语言,在这些高级语言内 ...
随机推荐
- php实现设计模式之 状态模式
<?php /*状态模式:允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它的类.(行为模式) * * 在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做 ...
- 你知道JavaScript中的结果值是什么吗?
你知道JavaScript中的每条语句.甚至表达式都有一个结果值吗? 当你在浏览器中测试代码时,经常会在控制台的输出结果的最后面多出一条,大部分为undefined,这个undefined就是一个结果 ...
- javascript代码 调试方法
你的代码可能包含语法错误,逻辑错误,如果没有调试工具,这些错误比较难于发现. 通常,如果 JavaScript 出现错误,是不会有提示信息,这样你就无法找到代码错误的位置. 在程序代码中寻找错误叫做代 ...
- 初识IOS,Label控件的应用。
初识IOS,Label控件的应用. // // ViewController.m // Gua.test // // Created by 郭美男 on 16/5/31. // Copyright © ...
- Kotlin开发语言文档(官方文档)-- 目录
开始阅读Kotlin官方文档.先上文档目录.有些内容还未阅读,有些目录标目翻译还需琢磨琢磨.后续再将具体内容的链接逐步加上. 文档链接:https://kotlinlang.org/docs/kotl ...
- React Native class 后面的命名首字母需要大写
React Native class 后面的命名首字母需要大写 否则会报Expeted a component class,got [object Object].
- jquery双向列表选择器DIV模拟版
前段时间项目需要用到双向列表选择,想直接用select,结果发现某些样式不支持,只好用div模拟了以下,功能基本实现能用了,需要其他功能自己加上,譬如列表里展示多列数据等. select版链接:htt ...
- css属性兼容主流浏览器
目前,对于网页中一些浏览器兼容性问题,可以使用css hack(css 招数)和浏览器Bug修复的方式解决. 名词解释: css Hack:针对特定浏览器编写冗余代码,这是一种欺骗浏览器的行为,预示着 ...
- Oracle死锁
当两个或多个用户相互等待锁定的数据时就会发生死锁,这时这些用户被卡在不能继续处理业务,oracle可以自动检测死锁并解决他们,通过回滚一个死锁中的语句,释放锁定的数据,回滚的话会遇到ora-00060 ...
- 禁止chrome记住密码
谷歌浏览器保存密码后输入框背景色变成黄色,会影响原来的输入框样式,css样式input:-webkit-autofill可以改变输入框样式,background-color,background-im ...