随笔分类 -  JavaScript基础

摘要:我们直觉上会认为 JavaScript 代码在执行时是由上到下一行一行执行的。但实际这并不完全正确 a = 2; var a; console.log(a); 这里可能会认为是 undefined,因为 var a 声明在 a = 2 之后。实际输出了 2。 console.log(a); var 阅读全文
posted @ 2020-02-23 08:52 wzndkj 阅读(169) 评论(0) 推荐(0) 编辑
摘要:除 JavaScript 外的很多编程语言都支持块作用域,但是 JavaScript 开发者对此并不是那么熟悉,尽管之前的标准中已经隐式的涵盖了这块内容 for(var i=0; i<10; i++) { console.log(i); } 我们把 var 写在 for 里面,通常是想在 for 循 阅读全文
posted @ 2020-02-22 10:15 wzndkj 阅读(188) 评论(0) 推荐(0) 编辑
摘要:立即执行函数表达式(IIFE,Immediately Invoked Function Expression) (function foo(){ var a = 3; console.log(3); })() 这种 (funciton foo(){...})()。第一个 () 将函数变成表达式,第二 阅读全文
posted @ 2020-02-21 10:30 wzndkj 阅读(384) 评论(0) 推荐(0) 编辑
摘要:在任意代码片段外部添加包装函数,可以将内部的变量和函数定义“隐藏”起来,外部作用域无法访问包装函数内部的任何内容。 var a = 2; function foo() { var a = 3; console.log(a); // 3 } foo(); console.log(a); // 2 虽然 阅读全文
posted @ 2020-02-19 09:53 wzndkj 阅读(249) 评论(0) 推荐(0) 编辑
摘要:function foo(a){ var b = 2; // ... function bar(){ // ... } // ... var c = 3; } foo 的作用域气泡中包含了标识符 a、b、c 和 bar bar 拥有自己的作用域气泡 全局作用域也有自己的作用域气泡,它只包含了一个标识 阅读全文
posted @ 2020-02-18 09:59 wzndkj 阅读(154) 评论(0) 推荐(0) 编辑
摘要:如果词法作用域完全由写代码期间函数所声明的位置来定义,怎样才能在运行时来“修改”词法作用域呢?有些人喜欢特殊的办法来解决遇到的问题。我们规定词法作用域是代码写在哪里决定的,一旦决定了无法更改,因为一些问题,我们不得不更改作用域,尽管这是不被推荐的,那是什么办法,JavaScript 中有两种机制来实 阅读全文
posted @ 2020-02-17 11:24 wzndkj 阅读(184) 评论(0) 推荐(0) 编辑
摘要:作用域分为两种,一种是词法作用域,一种是动态作用域。事实上 JavaScrtip 并不具有动态作用域。它只有词法作用域。 如果非要从 JavaScript 中找到动态作用域,那么动态作用域是 this 的表亲。this 是 JavaScript 一个重要的机制 function foo() { co 阅读全文
posted @ 2020-02-16 08:31 wzndkj 阅读(332) 评论(0) 推荐(0) 编辑
摘要:作用域分为两种,一种是词法作用域,一种是动态作用域,我们先看第一种,词法作用域 词法作用域就是定义在词法阶段的作用域(编译器的第一个工作阶段叫做词法化,词法化的过程会对源代码中的字符进行检查)。换句话说,词法作用域是由你在写代码时将变量和块作用域写在哪里来决定的。因此词法分析器处理代码时会保持作用域 阅读全文
posted @ 2020-02-15 08:33 wzndkj 阅读(183) 评论(0) 推荐(0) 编辑
摘要:在变量还没有声明, LHS,RHS 两种查询的行为是不一样的 function foo(a){ console.log(a+b); b=a; } foo(2); 第一次对 b 进行 RHS 查询时是无法找打该变量对,如果 RHS 查询在所有嵌套的作用域中遍寻不到所需的变量,引擎就会抛出 Refere 阅读全文
posted @ 2020-02-14 10:31 wzndkj 阅读(145) 评论(0) 推荐(0) 编辑
摘要:作用域是根据名称查找变量的一套规则。实际情况下,通常需要同时顾及几个作用域。来看两个例子 function foo(a){ console.log(a); //2 } foo(2); 把这段代码的处理过程想象成一段对话 引擎:我说作用域,我需要为 foo 进行 RHS 引用,你见过它吗? 作用域:别 阅读全文
posted @ 2020-02-13 10:39 wzndkj 阅读(156) 评论(0) 推荐(0) 编辑
摘要:对代码进行处理的三个角色 引擎:从头到尾负责整个 JavaScript 程序的编译和执行过程 编译器:负责语法分析及代码生成等 作用域:负责收集并维护所有变量的查询 var a = 2; 编译器首先会将这段程序分解成词法单元,然后将词法单元流解析成一个树结构。然后将树结构转换成可执行代码,也就是计算 阅读全文
posted @ 2020-02-12 09:36 wzndkj 阅读(312) 评论(0) 推荐(0) 编辑
摘要:JavaScript 是一门编译语言,它不是提前编译的,这是与传统的编译语言不同的地方。但是其编译步骤和传统的编译语言非常相似 编译:程序中的一段源代码在执行之前会经历三个步骤,统称为“编译” 1、分词/词法分析 将字符串 分解成 代码块(词法单元) var a = 2; 分解成 var、a、=、2 阅读全文
posted @ 2020-02-10 09:33 wzndkj 阅读(225) 评论(0) 推荐(0) 编辑
摘要:不使用模块化 1、util.js 封装了一个getFormatDate函数 2、a-util.js 封装了一个aGetFormateDate函数,这个函数使用了utils.js中的getFormatDate 3、a.js 使用了a-util.js中的aGetFormateDate util.js f 阅读全文
posted @ 2019-05-30 07:03 wzndkj 阅读(220) 评论(0) 推荐(0) 编辑
摘要:因为js最初是一个解释型语言,执行速度要比编译型语言慢得多。chrome是第一款内置优化引擎,将js编译成本地代码的浏览器。此后,主浏览器纷纷效仿,陆续实现了js的编译执行。即使到了编译执行js的新阶段,仍然会存在效率低的代码。不过,还是有一些方式可以改进代码的整体性能的 避免全局查找随着作用域数量 阅读全文
posted @ 2018-04-26 06:52 wzndkj 阅读(240) 评论(0) 推荐(0) 编辑
摘要:什么是可维护性代码 代码约定1、可读性 2、变量和函数命名由于很多js开发人员最初都只是业余爱好者,所以有一种使用无意义名字的倾向,诸如foo,bar,dosomething这样的名字。专业的js开发人员必须克服这些恶习以创建可维护性的代码。 3、变量类型透明由于在js中变量是松散类型,很容易忘记变 阅读全文
posted @ 2018-04-24 07:28 wzndkj 阅读(2091) 评论(0) 推荐(0) 编辑
摘要:选择框的value属性 如果用户选择了其中第一项,则选择框的值就是'Sunnyvale,Ca',如果文本为'China'的选项被选中,则选择框的值就是一个空字符串,因为其value特性是空的。如果选择了最后一项,那么由于<option>中没有指定value特性,则选择框的值就是'Australia' 阅读全文
posted @ 2018-04-18 07:16 wzndkj 阅读(308) 评论(0) 推荐(0) 编辑
摘要:input与textarea 1、要表现为文本框,必须设置type为text2、设置size特性,可以指定文本框能够显示的字符数3、设置value特性,可以设置文本框的初始值4、maxlength用于指定文本框可以接收的最大字符数。 1、与input不同,要指定文本框的大小,可以使用rows(字符行 阅读全文
posted @ 2018-04-17 06:52 wzndkj 阅读(436) 评论(0) 推荐(0) 编辑
摘要:取得<form>元素引用的方式 提交表单定义提交按钮 提交事件 这种方式无需表单包含的提交按钮,任何时候都可以正常提交表单 *:在第一次提交表单后,如果长时间没有反应,用户可能会变得不耐烦。这时候,他们也许会反复单击提交按钮,结果往往会很麻烦,因为服务器要处理重复的请求,或者造成错误,如果用户是下订 阅读全文
posted @ 2018-04-12 07:02 wzndkj 阅读(198) 评论(0) 推荐(0) 编辑
摘要:getElementByClassName()方法getElementByClassName()方法接收一个参数,即一个包含一或多个类名的字符串,返回带有指定类的所有元素的NodeList focus() document.activeElement属性,这个属性会引用dom中当前获得了焦点的元素。 阅读全文
posted @ 2018-04-10 06:51 wzndkj 阅读(183) 评论(0) 推荐(0) 编辑
摘要:querySelector()方法querySelector()方法接收一个css选择符,返回与该模式匹配的第一个元素,如果没有找到匹配的元素,返回null。 querySelectorAll()方法querySelectorAll()方法接收的参数与querySelector()方法一样,都是一个 阅读全文
posted @ 2018-04-09 06:39 wzndkj 阅读(181) 评论(0) 推荐(0) 编辑