直接先看两段代码 function getSum() {var sum = a + b;var a = 1;var b = 2;return sum;}getSum(); function getSum() {var sum = a + b;a = 1;b = 2;return sum;}getSum(); 大家能够先看一下这两段代码的异同,并推断一下运行后分别得到的结果。 在运行第一段代码时,得到的NaN,这是由于在函数中变量声明被提升的结果。在运行“sum = a + b”前,先进行了a,b的定义。但由于没有赋值(赋值不会被提升)。所以此时...
<script>/*js是函数级作用域,在函数内部的变量,内部都能访问, 外部不能访问内部的,但是内部可以访问外部的变量闭包就是拿到本不该属于他的东西,闭包会造成内存泄漏,你不知道什么时候会用这个闭包,然后这个资源会一直占据内存,造成内存泄漏*//*1 --函数内部可以访问外部的变量*//*var i = 10;function test() {console.log(i);}test();*//*2 在函数外部,我们就不能访问函数内部的变量,不然会报变量没有被定义*//*functio...
在学习JavaScript的变量作用域之前,我们应当明确几点: a、JavaScript的变量作用域是基于其特有的作用域链的。 b、JavaScript没有块级作用域。 c、函数中声明的变量在整个函数中都有定义。<script> var x = 1; function outer() {var y = 2;function inner() {var z = 4;alert(x);}inner(); } outer(); </script>alert(x)这句代码,JavaScript首先在inner函数中查找是否定义了变量x,如果定义了则使用inner函数中的x变量;如果i...
touches: 当前屏幕上所有触摸点的列表; targetTouches: 当前对象上所有触摸点的列表; changedTouches: 涉及当前事件的触摸点的列表通过一个例子来区分一下触摸事件中的这三个属性:用一个手指接触屏幕,触发事件,此时这三个属性有相同的值。用第二个手指接触屏幕,此时,touches有两个元素,每个手指触摸点为一个值。当两个手指触摸相同元素时,targetTouches和touches的值相同,否则targetTouches 只有一个值。changedTouches此时...
闭包与变量:作用域链的一个副作用,闭包只能取得包含函数中任何变量的最后一个值。别忘了闭包所保存的是整个变量对象,而不是某个特殊的变量。 function fn1(){//创建一个数组var arr = new Array();//为数组赋值,此时i是保存在fn1 这个作用域中for (var i = 0; i <10; i++) {arr[i] = function(){return i}}return arr;}var fs = fn1();for (var i = 0; i < fs.length; i++) {fs[i](); //此时通过闭包来调用函数,会去上一...
在编写事件的时候,我们难免会遇到以下这种情况:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body> <ul> <li>内容一</li> <li>内容二</li> <li>内容三</li> <li>内容四</li> <li>内容五</li> <li>内容六</li> </ul></body><script> window.onload=function(){ var oli = document.getElementsByTagName(‘li‘)...
JavaScript概述1.1 什么是JavaScript: javaScript(简称js),是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言。同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能,比如响应用户的各种操作。它最初由网景公司(Netscape)的Brendan的Eich设计,是一种动态、弱类型、基于原型的语言,内置支持类。一种运行于 JS解释器/引擎 解释型脚本语言。因为Netscape与Sun合作,Netscape管理层希望它...
数据类型计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值。但是,计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。在JavaScript中定义了以下几种数据类型:NumberJavaScript不区分整数和浮点数,统一用Number表示,以下都是合法的Number类型:12// 整数3.14 // 浮点数1.1e3 // 科学计数法 1.1 x 1000-12 // 负数NaN ...
一、javascript语法构成1.区分大小写ECMAScript中的一切,包括变量、函数名和操作符都是区分大小写的。例如:abc和ABC表示两种不同的变量。2.标识符所谓标识符,就是指变量、函数、属性的名字,或者函数的参数。标识符可以是下列格式规则组合起来的一或多个字符: 1.第一字符必须是一个字母、下划线(_)或一个美元符号($)。 2.其他字符可以是字母、下划线、美元符号或数字。 3.不能把关键字、保留字、true、false和null作为...
一、变量提升 在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域。变量提升即将变量声明提升到它所在作用域的最开始的部分。上个简历的例子如:12345678910console.log(global); // undefinedvar global = ‘global‘;console.log(global); // global function fn () { console.log(a); // undefinedvar a = ‘aaa‘; console.log(a); // aaa}fn(); 之所以会是以上的...
这里写的都是些杂知识,包括私有,类,闭包这些js不可避免的东西,感觉自己有可能会误人子弟。所以有觉得写错了的读者,希望可以及时评论告诉我。我可以及时更正。多谢大家了 1.关于类的创建 类的创建大致可以分为两类,一个是用方法来定义,另一个是用对象来定义。 下面这个是使用function来定义类 var Cat = function(){this.name1 = "Cat1";//外部可访问,可以理解为 公共的var name2 = "Cat2"...
我有一个模式可以在查询字符串中找到匹配项:'url.com/foo/bar?this=that&thing=another'.replace(/(thing=)([^&]*)/, '$1test')我想做的是使用变量值作为要匹配的参数:'url.com/foo/bar?this=that&thing=another'.replace('/(' + key + '=)([^&]*)/', '$1test')[edit]以下是代码使用方式的上下文:GetSrcParam: function(key, value) {var newSrc = $(this._image).attr('src'),pattern = '(' + key + '=)([^&]*)';if (newSrc.ma...
一、前言 只能说,js所谓的变量提升,是设计缺陷,让很多新老手迷惑。好在ES6出了let和const,杜绝了大部分的变量提升问题,下面引述一位博友的话,他说的 “标识符提升”确实更为妥当。首先纠正下,文章标题里的 “变量提升” 名词是随大流叫法,“变量提升” 改为 “标识符提升” 更准确。因为变量一般指使用 var 声明的标识符,JS 里使用 function 声明的标识符也存在提升(Hoisting)。JS 存在变量提升,这个的设计其实是低劣的...
我正在尝试使用push方法创建一个键/值对数组,但会得到意想不到的结果. console.log打印这个:books: [{“bookTitle”:”Mark Twain”}]虽然我希望如此:books: [{“Tom Sawyer” : “Mark Twain”}]这是代码:var books = []; var bookTitle = "Tom Sawyer"; var author = "Mark Twain";books.push({bookTitle : author})console.log("books: %s", JSON.stringify(books))我试过books.bookTitle =作者和书籍[bookTitle] =作者,但结...
javascript中一个标识符所在的位置越深,它的读写速度也越慢。因此,函数中读写局部变量总是最快的,而读写全局变量通常是最慢的。一个好的经验法则是:如果某个跨作用域的值在函数中被引用一次以上,那么就把它存储到局部变量里。 例如: 代码如下:<!-- 优化前 --> <script type="text/javascript"> function initUI () { var bd = document.body, links = document.getElementByTagName("a"), i=0, len=links.length; while(i <...