javascript学习总结一
1. 变量提升hoisting
变量提升的意思是在一个变量作用域里定义的变量的声明会被提升到作用域的顶部,这是变量只会被声明,不会被初始化复制,而是undefined。
代码如下:
function scopefunc() {
console.log(variable1);
/* console.log(variable2);*/
var variable1 = "I'm variable1";
console.log(variable1);
};
window.onload = function () {
scopefunc();
}
运行结果:
undefined
I'm variable1
被注释的那句代码会报错,证明没被定义的变量不是undefined而是直接报错。
针对变量的这个特性,在编写javascript代码时,应当遵循这样的风格:
在一个作用域的顶部使用一个 var 且定义所有的变量,可初始化或不初始化
如下:
function scropefunc() {
var variable1 = "I'm variable1",
variable2,func1;
console.log(variable1);
func1 = function () {
variable2 = "I'm variable2";
console.log(variable2);
};
}
ES6中使用的let 声明的变量不会发生变量提升,同时作用域是块作用域,表现就是当前花括号内。
函数声明:
(function() {
log("first log");
function log(arg) {
console.log(arg);
}
log("second log");
})();
函数声明也会被提到作用域的顶部,所以在声明之前使用函数也是可以的,比如上面的log函数。
ES5中函数声明不能在块中,但ES6中可以在块中声明函数,类似于使用了let所以不能提前使用,在具体使用时还是很容易令人迷惑的,所以避免在块中声明函数。
2. 变量作用域链
在上面一段代码中,func1函数里访问了variable2这个变量,但是这个变量只是在func1的外面的scopefunc函数内定义的,没有被func1所定义,那么func1是怎么找到的呢?
先介绍执行环境的概念,函数被调用时会产生一个新的执行环境,在JavaScipt引擎中,执行环境对象实现了执行环境这个概念。执行环境是可以嵌套的,并且内层的执行环境可以访问外层的执行环境,但外层的不能访问内层的执行环境。就像是一条链子,JavaScript在访问变量时,从当前执行环境开始查找,如果没有找到,向上一级执行环境中查找,直到顶级的执行环境(html中是window对象,nodejs是global),
3. 立即调用函数表达式 IIFE
立即调用函数表达式的全称是 Immediately Invoked Function Expression
这是一个js函数,在定义时就会执行,通常会用来防止污染全局变量,在模块模式中经常会用到
代码示例如下:
(function() {
var private_Var = 7;
console.log("this is inner IIFE");
})();
将这段代码靠到nodejs的命令行,回车就会输出this is inner IIFE,并且访问private_Var会出错。
javascript学习总结一的更多相关文章
- JavaScript学习(一) —— 环境搭建与JavaScript初探
1.开发环境搭建 本系列教程的开发工具,我们采用HBuilder. 可以去网上下载最新的版本,然后解压一下就能直接用了.学习JavaScript,环境搭建是非常简单的,或者说,只要你有一个浏览器,一个 ...
- Web编程基础--HTML、CSS、JavaScript 学习之课程作业“仿360极速浏览器新标签页”
Web编程基础--HTML.CSS.JavaScript 学习之课程作业"仿360极速浏览器新标签页" 背景: 作为一个中专网站建设出身,之前总是做静态的HTML+CSS+DIV没 ...
- JavaScript学习(3):函数式编程
在这篇文章里,我们讨论函数式编程. 什么是函数式编程?根据百度百科的描述,“函数式编程是种编程典范,它将电脑运算视为函数的计算.函数编程语言最重要的基础是 λ 演算(lambda calculus). ...
- JavaScript学习(2):对象、集合以及错误处理
在这篇文章里,我们讨论一下JavaScript中的对象.数组以及错误处理. 1. 对象 对象是JavaScript中的一种基本类型,它内部包含一些属性,我们可以对这些属性进行增删操作. 1.1 属性 ...
- JavaScript学习13 JavaScript中的继承
JavaScript学习13 JavaScript中的继承 继承第一种方式:对象冒充 <script type="text/javascript"> //继承第一种方式 ...
- JavaScript学习12 JS中定义对象的几种方式
JavaScript学习12 JS中定义对象的几种方式 JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工 ...
- JavaScript学习11 数组排序实例
JavaScript学习11 数组排序实例 数组声明 关于数组对象的声明,以前说过:http://www.cnblogs.com/mengdd/p/3680649.html 数组声明的一种方式: va ...
- JavaScript学习10 JS数据类型、强制类型转换和对象属性
JavaScript学习10 JS数据类型.强制类型转换和对象属性 JavaScript数据类型 JavaScript中有五种原始数据类型:Undefined.Null.Boolean.Number以 ...
- JavaScript学习09 函数本质及Function对象深入探索
JavaScript学习09 函数本质及Function对象深入探索 在JavaScript中,函数function就是对象. JS中没有方法重载 在JavaScript中,没有方法(函数)重载的概念 ...
- JavaScript学习08 Cookie对象
JavaScript学习08 Cookie对象 JavaScript Cookie Cookie对象: Cookie是一种以文件的形式保存在客户端硬盘的Cookies文件夹中的用户数据信息(Cooki ...
随机推荐
- Spring OAuth2 GitHub 自定义登录信息
# 原因 最近在做一款管理金钱的网站进行自娱自乐,发现没有安全控制岂不是大家都知道我的工资了(一脸黑线)? 最近公司也在搞 Spring OAuth2,当时我没有时间(其实那时候不想搞)就没做,现在回 ...
- CXGrid TcxButtonEdit 信息获取 TcxButtonEditProperties取得TcxGridDBTableView
( TcxButtonEdit(Sender).ActiveProperties).Buttons[AButtonIndex].Hint;//取到按钮本身的属性IntToStr( ( TcxGridS ...
- The based of tuning
调优目的: 1. 提高资源利用率 2. 找出性能瓶颈并缓解 3. 通过性能管理实现合理的资源分配,提升硬件性价比 调优分层及效率问题: 业务级调优 eg:1)网站使用的Apache—>业 ...
- 关于bootstrap的form表单的输入框间距样式
<!-- 模态弹出窗内容 --> <div class="modal" tabindex="-1" role="dialog&quo ...
- 0x00-Kali Linux 系列入门篇
Kali Linux介绍篇 Kali Linux 官网:https://www.kali.org/ Kali Linux 前身是著名渗透测试系统BackTrack ,是一个基于 Debian 的 Li ...
- 将 Shiro 作为应用的权限基础 一:shiro的整体架构
将 Shiro 作为应用的权限基础 一:shiro的整体架构 近来在做一个重量级的项目,其中权限.日志.报表.工作量由我负责,工作量还是蛮大的,不过想那么多干嘛,做就是了. 这段时间,接触的东西挺多, ...
- Django学习(六)---博客文章页面的超链接设置
Django中的超链接 超链接的目标地址 href后面是目标地址 template中可以用 {% url 'app_name : url_name' param %} app_name:应用命名 ...
- 2018(上)C高级第0次作业
一:已关注邹欣老师的博客,以及一些任课老师的博客. 二:新学期新气象,走过基础C语言的学习,转眼间来到了C语言的高级学习... 1.翻阅邹欣老师博客关于师生关系博客,并回答下列问题. (1)最理想的师 ...
- [福州大学]W班平时成绩排名
评分链接 个人作业 第一次作业 http://www.cnblogs.com/1qazse4/p/7506448.html 第二次作业 http://www.cnblogs.com/1qazse4/p ...
- 网络1711班 C语言第四次作业批改总结
网络1711班 C语言第四次作业批改总结 助教有话说(写在前面) 近来,有同学跟老师和助教们反映:博客作业太多太麻烦,而且对编程能力提高似乎没什么帮助?在这里我要谈一谈我的感想. 博客作业的意义? 首 ...