JavaScript的一些基本概念

执行环境与作用域

  1. 执行环境是什么?
    所谓的执行环境就是变量和函数所运行的环境, 定义了这些变量或函数访问权, 也决定了它们各自的行为, 每个执行环境都有一个与之关联的变量对象, 而在执行环境中所有变量和函数都保存在这个对象中, 我们无法访问这个对象

  2. 全局执行环境是什么?
    全局执行环境是最外层的执行环境, 一般默认为window对象

  3. 谁拥有着执行环境?
    每个变量对象函数都有自己的执行环境, 当执行一个函数时, 该函数的环境就会被推入一个环境栈中, 当函数执行后, 才会被弹出并且返回执行权

  4. 作用域链是什么?又有什么作用?
    而当函数在一个环境中执行时, 会创建变量对象的一个作用域链( scope chain ), 这个作用域链的主要作用就是用来保证对执行环境有权访问的所有变量和函数的有序访问

  5. 作用域链的层级?
    作用域链的最前线始终都是当前执行环境的变量对象, 如果该环境为函数, 则将其活动对象( activation object )作为第一个变量对象, 该对象便是arguments对象, 而作用域链中的下一个变量对象在来源于包含该环境的外部环境的变量对象, 而以此类推, 将一直延伸到全局执行环境中

  6. 作用域链中标识符怎么解析?
    标识符解析是沿着作用域链一级一级的搜索标识符的过程, 始终从最前端开始再逐级向后回溯, 直到找到该标识符为止, 如果失败, 则导致错误

ES6之前没有块级作用域

也就是说类似与if( ) {}或者for() {}之间的变量并不会被销毁而是会被添加到当前执行环境中
ES6 以后可以使用let 定义块级作用域变量

call() 和 apply() 扩充作用域

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>call and apply</title>
</head>
<body>
    <p>call和apply都是用于传递参数, 差别在于call需要将参数逐个列出, 而apply更适用于直接传递一个数组</p>
    <p>而call()和apply()真正用途是用于扩充函数作用域, 也就是将执行环境添加到参数中</p>
</body>
<script>
    window.color = "red";
    var o = { color: "blue" };

    function sayColor() {
        console.log(this.color);
    }

    sayColor(); // red

    sayColor.call(this); //red
    sayColor.call(window); //red
    sayColor.call(o); //blue
    /*
    在这里, call将执行环境扩充到了o对象中, 所以输出时以o对象作为执行环境, 所以输出时将为blue
    */
</script>
</html>

Global对象

该对象是ECMAScript中最后的对象, 所有不属于任何其他对象的属性和方法, 最终都是它的属性和方法, 即所有全局作用域中定义的属性和方法都是Global对象的属性

eval() 方法

该方法是ECMAScript中最强大的一个方法, 它只接受一个参数, 也就是需要执行的ECMAScript字符串, 它本身就类似于一个ECMAScript解析器

eval("alert('hi')")

通过 eval() 执行的代码将会被视作为包含该次调用的执行环境的一部分, 也就是说被执行的代码具有与该执行环境相同的作用域链, 意味着通过eval()执行的代码可以引用在包含环境中定义的变量

var msg = 'hello world';
eval("alert(msg)") //hello world;
/*在严格模式中外部访问不到eval()创建的任何变量或函数*/

一些关于JavaScript中引用类型的纪录

  1. 引用类型与传统面向对象程序设计中的类相似, 不过实现不同
  2. Object是一个基础类型, 其他所有类型都从Object中继承了基本的行为
  3. Array类型是一组值的有序列表, 同时还提供了操作和转换这些值的功能
  4. Date类型提供了大量关于日期和时间的信息和计算功能
  5. RegExp类型是ECMAScript支持正则表达式的一个接口
  6. Function类型创建了函数
  7. 三种基本包装类型分别是 Boolean, Number和String
  8. 作用域最早的内置对象, Global和Math, 不过是不能直接访问Global对象的, 但是Web浏览器本身实现了承担该角色的window对象
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容