【JavaScript高级进阶】JavaScript变量/函数提升的细节总结
// 测试1
console.log('----------test1--------------');
console.log(global); // undefined
var global = 'hahaha';
console.log(global); // hahaha
function fn(){
console.log(a); // undefined
var a = 'aaa';
console.log(a); // aaa
}
// 如果一个变量没有定义的话就去输出,就会报出错误
//console.log(a); // error : undefined
fn();
// 代码执行思路解析
/*var global; // 变量提升,全局作用域范围内,此时只是声明,并没有赋值
console.log(global); // undefined
global = 'hahaha'; // 此时给变量赋值
console.log(global); // 输出已经赋值过的global变量
function fn(){
var a; // 变量提升为函数作用域范围内
console.log(a);
a = 'aaa';
console.log(a);
}
fn();*/
// 测试2 : 函数提升
console.log("------------------函数提升测试-----------------");
console.log(f1); // [Function: f1]
console.log(f2); // undefined
function f1(){ // 这块代码会自动函数提升,整个代码块提升到文件的最开始部分
}
var f2 = function(){
}
console.log(f2);
// 测试3
console.log("------------test3---------------");
// 第一步会先去执行f1()函数,执行完毕这个函数之后开始打印输出这个函数的返回值
console.log(f1()); // undefined 123456hahaha
function f1(){
console.log('aaa'); // aaa
return '123456hahaha';
}
console.log(f4); // var f4 undefined
var f4 = function(){
console.log('f4 executed!');
return 'f4 hahaha!';
}
console.log(f4, typeof f4); // 这里得到的实际上是一个函数
// 测试4
console.log('-------------test4------------');
console.log(aaa); // undefined
aaa = '987654321'; // 987654321
console.log(aaa);
var aaa = '123456789';
console.log(aaa); // 123456789
var aaa = '789';
console.log(aaa); // 789
// 测试5
console.log('--------------test5----------------');
var a = '12346789';
(function(){
// 这里的a默认是回去寻找全局作用域里面的a变量
console.log(a); /// error : a is not defined
a = '113579';
var b = 'bbb';
console.log(a);
})();
// 测试6
// 在方法外边不加上一个var是不能来定义变量的
//01. 都加var,在方法内则是局部变量,在方法外则是全局变量。
//02. 在方法内,加var为局部变量,不加var则是全局变量(在执行当前方法之后)
//console.log(bianliang); // error : is not defined
console.log('-----------------test6-----------------');
function test(){
//console.log(shuchubianliang); // error : is not defined
}
test();
var aaaa = 'I\'m a in all'
function test1 () {
// 相当于是var a, 然后输出a的值,当然是undefined
console.log(aaaa)
//console.log(window.a)
var a = 'I\'m a in test1'
console.log(a)
}
test1()
// JavaScript会把作用域里的所有变量和函数提到函数的顶部声明
// JavaScript会使用undefined缺省值创建变量a
console.log(aaaaaaa); // error
var aaaaaaa = '11';
console.log('------------test7-------------');
//思考题: 请问下面的结果是什么? 为什么? 写下你的答案
show();
var a = true;
if( a ){
function show(){
console.log( 1 );
}
}else {
function show(){
console.log( 2 );
}
}
//函数声明, 形如:
function show(){
console.log( '函数声明方式' );
} // 会被提升为全局
//函数表达式, 形如:
var show = function(){
console.log( '表达式方式' );
} // 不会被提升为全局的
【JavaScript高级进阶】JavaScript变量/函数提升的细节总结的更多相关文章
- JavaScript高级程序设计学习笔记--函数表达式
关于函数声明,它的一个重要特征就是函数声明提升,意思是在执行代码之间会读取函数声明,意思是在执行代码之前会先读取函数声明.这就意味着可以把函数声明放在调用它的语句 后面. sayHi(); funct ...
- 《JavaScript高级程序设计》 -- 变量、作用域和内存问题(二)
1.基本类型与引用类型 基本类型:值保存在变量中 (Number.String.Boolean.Undefined.Null).在内存中占据固定大小空间,被保存在栈内存中 引用类型:值是保存在内存中的 ...
- javascript高级程序设计读书笔记----函数表达式
定义函数两种方式: 1.函数声明 function sayHi(){ alert("Hi"); } sayHi();//调用函数 2.函数表达式 var sayHi = funct ...
- 读javascript高级程序设计16-几条函数小技巧
内容概要 作用域安全的构造函数 惰性载入函数 函数绑定 函数节流 一.作用域安全的构造函数 我们知道,当使用new操作符调用构造函数时,构造函数内部的this会指向新创建对象的实例. function ...
- javascript高级知识分析——定义函数
代码信息来自于http://ejohn.org/apps/learn/. 可以使用哪些方式来声明函数? function isNimble(){ return true; } var canFly = ...
- JavaScript高级程序设计-(3) 变量、作用域和内存问题
传递参数 ECMAScript所有函数参数都是按值传递的,即使对象在函数内部修改了参数的值,原始的引用任然不变,局部对象在函数执行完毕后被销毁
- Javascript高级程序设计——javascript简介
1.Javascript简史 javascript诞生于1995年,是由网景公司的Brendan Eich开发的,最初的目的是在客户端处理一些输入验证操作,自此后成为常见浏览器的特色功能,如今用途已经 ...
- Javascript高级程序设计——Javascript简史+使用Javascript
一.Javascipt简史 1.了解Javascript历史 Netscape(Javascript1.0).Microsoft(JScript)到JS1.1,再到ECMA-262标准 2.知道ECM ...
- 浅谈JavaScript变量声明提升
前段时间阿里实习生内推,一面就被刷了,也是郁闷.今天系统给发通知,大致意思就是内推环节不足以了解彼此,还可以参加笔试,于是赶紧再投一次.官网流程显示笔试时间3月31日,时间快到了,开始刷题.网上搜了一 ...
随机推荐
- Android:隐藏ActionBar
在OnCreate函数中添加:getActionBar().hide();
- 工作easy,赚钱非常难
李宗盛有首歌的歌词里写到:「工作是easy的,赚钱是困难的」. 乍一听感觉有点矛盾,工作的一个重要结果不就是赚钱么,为什么工作easy赚钱却难?但细致一想就恍然当中想表达的意思了. 工作的本质是出售劳 ...
- iOS UITableView 去除多余切割线
在UITableView初始化时加上下面代码就可以: self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero ...
- 最全Linux 与 Linux Windows 文件共享
前提说明: windows主机信息:192.168.1.100 帐号:abc password:123 共享目录:share linux主机信息:192.168.1.200 帐号:def passwo ...
- 运用smali自己主动注入技术分析android应用程序行为
如今android开发人员社区里,除了app开发外,还有非常多周边的工具类产品,比方安全.性能等,app产品 已经出现了巨无霸,可是工具类的产品.眼下还没有出现规模比較大的公司,大部分还处于创业阶段, ...
- Building Maintainable Software-java篇之Couple Architecture Components Loosely
Building Maintainable Software-java篇之Couple Architecture Components Loosely There are two ways of co ...
- 利用jquery将页面中所有目标为“#‘的链接改为其他URL
有一张页面草稿,开始时为了方便,里面差不多所有的<a>都指向了"#".现在要修改为另一个地址,难道要全部修改吗?用jquery 改改就好.代码如下: <scrip ...
- hdoj--5612--Baby Ming and Matrix games(dfs)
Baby Ming and Matrix games Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K ...
- Python 38 初识数据库
数据库 1.什么是mysql,什么是数据库? 文件处理就可以将数据永久存储 问题 1.管理不方便 2.文件操作效率问题 3.一个程序不太可能仅运行在同一台电脑上 提高计算机性能的方式 1.垂直扩展 ...
- 使用node成功安装完某插件typescript后,在使用时提示:tsc(或xxx)不是内部或外部命令,也不是可运行的程序或批处理文件
具体出错情形: 使用npm安装typescript明明安装成功,但在使用时一直报错,报错语句为 tsc不是内部或外部命令,也不是可运行的程序或批处理文件 具体出错原因: node未正确安装,或相关环 ...