美文网首页
day06(2017.10.9)

day06(2017.10.9)

作者: 晴_eeca | 来源:发表于2017-10-09 21:40 被阅读12次

一、变量声明提升

引擎解释javascript代码的之前会对其进行编译。在编译过程中会查找所有声明,并用合适作用域将他们关联起来。换句话说,在代码执行之前,会对作用域链中所有变量和函数声明先处理完先。所以,当遇到var a='hello world'中是 var a是先在编译阶段执行,然后在执行a='hello world'。

百度

var a = "hello world";
var a;
console.log(a);  //输出结果是“hello world”
console.log(a);  //输出结果是“undefined”
var a = "hello world";
第一段代码实质上是:
var a;
a='hello world';
console.log(a);  //输出“hello world”
总结一句话就是:只有声明被提升,而赋值或其他运算会留在原地。所以第二段代码实际上就是:
var a;
console.log(a);   //输出结果是“undefined”
a='hello world';

二、函数声明提升

函数两种创建方式
1.函数声明
fn('hello world');   //输出“hello world”
function fn(name){
    console.log(name);
}
2.函数表达式
fn('hello world');
var fn= function(name){
    console.log(name);
}
运行上面的代码,会报错Uncaught ReferenceError: fn is not defined(…),错误信息显示说fn没有被定义。
总结一句话就是:函数声明提升,函数声明语句将会被提升到外部脚本或者外部函数作用域的顶部(跟变量提升非常类似)。
案例:
var getName = function(){
    console.log(2);
}
function getName (){
    console.log(1);
}
getName();

函数声明function getName(){}的声明会被提前到顶部。而函数表达式var getName = function(){}则表现出变量声明提升。
因此在这种情况下,getName也是一个变量,因此这个变量的声明也将提升到底部,而变量的赋值依然保留在原来的位置。
因此上面的函数可以转换成下面的样子:

var getName;    //变量声明提升
function getName(){    //函数声明提升到顶部
    console.log(1);
}
getName = function(){    //变量赋值依然保留在原来的位置
    console.log(2);
}
getName();    // 最终输出:2

三、内置对象、本地对象、宿主对象

1、宿主环境:一般宿主环境由外壳程序创建与维护,只要能提供js引擎执行的环境都可称之为外壳程序
如:web浏览器,一些桌面应用系统等。即由web浏览器或是这些桌面应用系统造就的环境即宿主环境
2、本地对象:ECMA-262 把本地对象(native object)定义为“独立于宿主环境的 ECMAScript 实现提供的对象”。
“本地对象”包含哪些内容:
Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、
EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError
由此可以看出,简单来说,本地对象就是 ECMA-262 定义的类(引用类型)
3、内置对象:ECMA-262 把内置对象(built-in object)定义为“由 ECMAScript 实现提供的、
独立于宿主环境的所有对象,在 ECMAScript 程序开始执行时出现”
ECMA-262 只定义了两个内置对象,即 Global 和 Math (它们也是本地对象,根据定义,每个内置对象都是本地对象)。
4.宿主对象:由ECMAScript实现的宿主环境提供的对象,可以理解为:浏览器提供的对象。所有的BOM和DOM都是宿主对象。
5.自定义对象
总结:JS中,可以将对象分为“内部对象”、“宿主对象”和“自定义对象”三种
1,内部对象
js中的内部对象包括Array、Boolean、Date、Function、Global、Math、Number、Object、
RegExp、String以及各种错误类对象,包括Error、EvalError、RangeError、ReferenceError、
SyntaxError和TypeError。
其中Global和Math这两个对象又被称为“内置对象”,这两个对象在脚本程序初始化时被创建,不必实例化这两个对象
2.宿主对象
宿主对象就是执行JS脚本的环境提供的对象。对于嵌入到网页中的JS来说,其宿主对象就是
浏览器提供的对象,所以又称为浏览器对象,如IE、Firefox等浏览器提供的对象。
不同的浏览器提供的宿主对象可能不同,即使提供的对象相同,其实现方式也大相径庭!这会带来浏览器兼容问题,增加开发难度。
浏览器对象有很多,如Window和Document等等。
3.自定义对象
顾名思义,就是开发人员自己定义的对象。JS允许使用自定义对象,使JS应用及功能得到扩充

相关文章

  • day06(2017.10.9)

    一、变量声明提升 引擎解释javascript代码的之前会对其进行编译。在编译过程中会查找所有声明,并用合适作用域...

  • 自律给我自由—Day006

    【叶子姑娘的自律100天挑战 Day06】 2019.01.19 Day06/100 【早起】周末也不要赖床。早起...

  • 2017.10.9

    转眼一年 我离开家到了陌生的北京,从第一次坐地铁却从来没有坐错过,到穿着随意地穿梭于大街小巷找工作,在姐姐家投简历...

  • 2017.10.9

    凌晨。 决定放弃微博转战简书倒也没有太大情绪起伏。无非只是想找个叨逼叨的地方。反正也没人找得到我不是?有些事有些话...

  • 2017.10.9

    冬天的来临总是让人很难适应 被吵醒后睡不着,也起不来 出门雨大的很,淋成落汤鸡 突然想起昨天下午返京,火车上那塞满...

  • 2017.10.9

    我有抑郁症 我觉得活着没有意义 每天晚上都会哭着说活着真的好辛苦 但我会试着努力活下去 努力找寻我喜欢的事情和爱我的人

  • 2017.10.9

    点点绰绰的脚步甚轻 淡淡已缺的花月伴着薄云 讲是丝丝绊绊的记忆未果 短夜里还有不知世故的蛙鸣

  • 2017.10.9

    任何感觉无能为力的事,都起源于自身的能力不足。所以不要抱怨。

  • 2017.10.9

    使用CDC类可以方便的完成图形与文本的操作 CDC:是设备上下文类的基类,用于屏幕窗口的绘制和非屏幕显示的打印机输...

  • 2017.10.9

    那一条不可逾越的鸿沟 是我们最大的差距 我一直以为没什么 可笑、可怜、可悲 后来,我终于知道 原来我们的起点就是不...

网友评论

      本文标题:day06(2017.10.9)

      本文链接:https://www.haomeiwen.com/subject/gltmyxtx.html