北京海淀区JavaScript培训班哪里有

    2020-11-09发布, 次浏览 收藏 置顶 举报
  • 授课时间:

    现场安排开课时间

  • 授课对象:

    想学Java的学员

  • 网报价格:电询    课程原价:电询
  • 咨询热线:400-998-6158
  • 授课地址:多个校区,电联加微信
  • 课程详情

  • 机构简介
  • 地图信息
  • 预约试听

北京海淀区JavaScript培训班哪里有


一章 -内容简介
1.1 发展史
1.2 的特点
1.3 语言和其他语言的比较
1.4 一个 程序

第二章 -基础
2.1 数据类型及变量
2.2 表达式与运算符
2.3 基本语句

第三章 -基础
3.1 条件控制语句
3.2 循环控制语句
3.3 实践练习

第四章 -D0M模型文档对象模型讲解
4.1 函数
4.2 对象
4.3 常用内置对象
4.4 与对象有关的语句

第五章 -事件Js事件
5.1 D0M模型框架
5.2 D0M模型中的节点
5.3 使用D0M
5.4 innerHTML

第六章 事件
6.1 事件流
6.2 事件
6.3 事件对象

第七章-表格与表单
7.1 表格基础
7.2 表单基础
7.3 文本框

第八章 表单验证
8.1 访问表单对象
8.2 访问表单元素
8.3 表单内容验证

第九章 Window对象
9.1 Window对象的属性和方法
9.2 Window对象的几个重要操作

第十章 框架(frame)对象
10.1 框架对象
10.2 框架对象的应用实例

第十一章 jQuery基础
11.1 jquery是什么
11.2 什么是jQuery对象?
11.3 jquery 的”$”

第十二章 jquery 控制页面
1.1 标记的属性
1.2 元素的样式
1.3 页面的元素

第十三章 Jquery制作动画与**
13.1 元素的显示与隐藏
13.2 渐入渐出的变幻
13.3 幻灯片效果

第十四章Jquery UI 插件

请看下面的代码片段:

for (var i = 0; i < 5; i++) { var btn = document.createElement('button');

btn.appendChild(document.createTextNode('Button ' + i));

btn.addEventListener('click', function(){ console.log(i); }); document.body.appendChild(btn);

}

(a)当用户点击“Button 4”的时候会输出什么到控制台,为什么?(b)提供一个或多个备用的可按预期工作的实现方案。

(a)无论用户点击什么按钮,数字5将总会输出到控制台。这是因为,当 onclick 方法被调用(对于任何按钮)的时候, for 循环已经结束,变量 i 已经获得了5的值。(面试者如果能够谈一谈有关如何执行上下文,可变对象,激活对象和内部“范围”属性贡有助于闭包行为,则可以加分)。

(b)要让代码工作的关键是,通过传递到一个新创建的函数对象,在每次传递通过 for 循环时,捕捉到 i 值。下面是三种可能实现的方法:

for (var i = 0; i < 5; i++) { var btn = document.createElement('button');

btn.appendChild(document.createTextNode('Button ' + i));

btn.addEventListener('click', (function(i) { return function() { console.log(i); };

})(i)); document.body.appendChild(btn);

}

或者,你可以封装全部调用到在新匿名函数中的 btn.addEventListener :

for (var i = 0; i < 5; i++) { var btn = document.createElement('button');

btn.appendChild(document.createTextNode('Button ' + i));

(function (i) {

btn.addEventListener('click', function() { console.log(i); });

})(i); document.body.appendChild(btn);

}

也可以调用数组对象的本地 forEach 方法来替代 for 循环:

['a', 'b', 'c', 'd', 'e'].forEach(function (value, i) { var btn = document.createElement('button');

btn.appendChild(document.createTextNode('Button ' + i));

btn.addEventListener('click', function() { console.log(i); }); document.body.appendChild(btn);

});

14.下面的代码将输出什么到控制台,为什么?

var arr1 = "john".split('');var arr2 = arr1.reverse();var arr3 = "jones".split('');

arr2.push(arr3);console.log("array 1: length=" + arr1.length + " last=" + arr1.slice(-1));console.log("array 2: length=" + arr2.length + " last=" + arr2.slice(-1));

输出结果是:

"array 1: length=5 last=j,o,n,e,s""array 2: length=5 last=j,o,n,e,s"

arr1 和 arr2 在上述代码执行之后,两者相同了,原因是:

调用数组对象的 reverse() 方法并不只返回反顺序的阵列,它也反转了数组本身的顺序(即,在这种情况下,指的是 arr1)。

reverse() 方法返回一个到数组本身的引用(在这种情况下即,arr1)。其结果为,arr2 仅仅是一个到 arr1的引用(而不是副本)。因此,当对 arr2做了任何事情(即当我们调用 arr2.push(arr3);)时,arr1 也会受到影响,因为 arr1 和 arr2 引用的是同一个对象。

这里有几个侧面点有时候会让你在回答这个问题时,阴沟里翻船:

传递数组到另一个数组的 push() 方法会让整个数组作为单个元素映射到数组的末端。其结果是,语句 arr2.push(arr3); 在其整体中添加 arr3 作为一个单一的元素到 arr2 的末端(也就是说,它并没有连接两个数组,连接数组是 concat() 方法的目的)。

和Python一样,JavaScript标榜数组方法调用中的负数下标,例如 slice() 可作为引用数组末尾元素的方法:例如,-1下标表示数组中的后一个元素,等等。

15.下面的代码将输出什么到控制台,为什么?

console.log(1 + "2" + "2");console.log(1 + +"2" + "2");console.log(1 + -"1" + "2");console.log(+"1" + "1" + "2");console.log( "A" - "B" + "2");console.log( "A" - "B" + 2);

上面的代码将输出以下内容到控制台:

"122""32""02""112""NaN2"NaN

原因是…

这里的根本问题是,JavaScript(ECMAScript)是一种弱类型语言,它可对值进行自动类型转换,以适应正在执行的操作。让我们通过上面的例子来说明这是如何做到的。

例1:1 + "2" + "2" 输出:"122" 说明: 1 + "2" 是执行的一个操作。由于其中一个运算对象("2")是字符串,JavaScript会假设它需要执行字符串连接,因此,会将 1 的类型转换为 "1", 1 + "2"结果就是 "12"。然后, "12" + "2" 就是 "122"。

例2: 1 + +"2" + "2" 输出: "32" 说明:根据运算的顺序,要执行的一个运算是 +"2"(一个 "2" 前面的额外 + 被视为一元运算符)。因此,JavaScript将 "2" 的类型转换为数字,然后应用一元 + 号(即,将其视为一个正数)。其结果是,接下来的运算就是 1 + 2 ,这当然是 3。然后我们需要在一个数字和一个字符串之间进行运算(即, 3 和 "2"),同样的,JavaScript会将数值类型转换为字符串,并执行字符串的连接,产生 "32"。

例3: 1 + -"1" + "2" 输出: "02" 说明:这里的解释和前一个例子相同,除了此处的一元运算符是 - 而不是 +。先是 "1" 变为 1,然后当应用 - 时又变为了 -1 ,然后将其与 1相加,结果为 0,再将其转换为字符串,连接后的 "2" 运算对象,得到 "02"。

例4: +"1" + "1" + "2" 输出: "112" 说明:虽然一个运算对象 "1"因为前缀的一元 + 运算符类型转换为数值,但又立即转换回字符串,当连接到第二个运算对象 "1" 的时候,然后又和后的运算对象"2" 连接,产生了字符串 "112"。

例5: "A" - "B" + "2" 输出: "NaN2" 说明:由于运算符 - 不能被应用于字符串,并且 "A" 和 "B" 都不能转换成数值,因此,"A" - "B"的结果是 NaN,然后再和字符串 "2" 连接,得到 "NaN2" 。

例6: "A" - "B" + 2 输出: NaN 说明:参见前一个例子, "A" - "B" 结果为 NaN。但是,应用任何运算符到NaN与其他任何的数字运算对象,结果仍然是 NaN。

16.下面的递归代码在数组列表偏大的情况下会导致堆栈溢出。在保留递归模式的基础上,你怎么解决这个问题?

var list = readHugeList();var nextListItem = function() { var item = list.pop(); if (item) { // process the list item...

nextListItem();

}

};

潜在的堆栈溢出可以通过修改nextListItem 函数避免:

var list = readHugeList();var nextListItem = function() { var item = list.pop(); if (item) { // process the list item...

setTimeout( nextListItem, 0);

}

};

堆栈溢出之所以会被消除,是因为事件循环操纵了递归,而不是调用堆栈。当 nextListItem 运行时,如果 item不为空,timeout函数(nextListItem)就会被推到事件队列,该函数退出,因此就清空调用堆栈。当事件队列运行其timeout事件,且进行到下一个 item 时,定时器被设置为再次调用 extListItem。因此,该方法从头到尾都没有直接的递归调用,所以无论迭代次数的多少,调用堆栈保持清空的状态。

17.JavaScript中的“闭包”是什么?请举一个例子。

闭包是一个可以访问外部(封闭)函数作用域链中的变量的内部函数。闭包可以访问三种范围中的变量:这三个范围具体为:(1)自己范围内的变量,(2)封闭函数范围内的变量,以及(3)全局变量。

下面是一个简单的例子:

var globalVar = "xyz";

(function outerFunc(outerArg) { var outerVar = 'a';

(function innerFunc(innerArg) { var innerVar = 'b'; console.log( "outerArg = " + outerArg + "\n" + "innerArg = " + innerArg + "\n" + "outerVar = " + outerVar + "\n" + "innerVar = " + innerVar + "\n" + "globalVar = " + globalVar);

})(456);

})(123);

在上面的例子中,来自于 innerFunc, outerFunc和全局命名空间的变量都在 innerFunc的范围内。因此,上面的代码将输出如下:

outerArg = 123innerArg = 456outerVar = ainnerVar = bglobalVar = xyz

18.下面的代码将输出什么:

for (var i = 0; i < 5; i++) {

setTimeout(function() { console.log(i); }, i * 1000 );

}

解释你的答案。闭包在这里能起什么作用?

上面的代码不会按预期显示值0,1,2,3,和4,而是会显示5,5,5,5,和5。

原因是,在循环中执行的每个函数将整个循环完成之后被执行,因此,将会引用存储在 i中的后一个值,那就是5。

闭包可以通过为每次迭代创建一个的范围,存储范围内变量的每个的值,来防止这个问题,如下:

for (var i = 0; i < 5; i++) {

(function(x) {

setTimeout(function() { console.log(x); }, x * 1000 );

})(i);

}

这就会按预期输出0,1,2,3,和4到控制台。

19.以下代码行将输出什么到控制台?

console.log("0 || 1 = "+(0 || 1));console.log("1 || 2 = "+(1 || 2));console.log("0 && 1 = "+(0 && 1));console.log("1 && 2 = "+(1 && 2));

并解释。

该代码将输出:

0 || 1 = 11 || 2 = 10 && 1 = 01 && 2 = 2

在JavaScript中, || 和 &&都是逻辑运算符,用于在从左至右计算时,返回一个可完全确定的“逻辑值”。

或( || )运算符。在形如 X||Y的表达式中,首先计算X 并将其解释执行为一个布尔值。如果这个布尔值true,那么返回true(1),不再计算 Y,因为“或”的条件已经满足。如果这个布尔值为false,那么我们仍然不能知道 X||Y是真是假,直到我们计算 Y,并且也把它解释执行为一个布尔值。

因此, 0 || 1 的计算结果为true(1),同理计算1 || 2。

与( &&)运算符。在形如 X&&Y的表达式中,首先计算 X并将其解释执行为一个布尔值。如果这个布尔值为 false,那么返回 false(0),不再计算 Y,因为“与”的条件已经失败。如果这个布尔值为true,但是,我们仍然不知道 X&&Y 是真是假,直到我们去计算 Y,并且也把它解释执行为一个布尔值。

,关于 &&运算符有趣的地方在于,当一个表达式计算为“true”的时候,那么就返回表达式本身。这很好,虽然它在逻辑表达式方面计算为“真”,但如果你希望的话也可用于返回该值。这就解释了为什么,有些令人奇怪的是, 1 && 2返回 2(而不是你以为的可能返回 true 或 1)。

20.执行下面的代码时将输出什么?请解释。

console.log(false == '0')console.log(false === '0')

代码将输出:

truefalse

在JavaScript中,有两种等式运算符。三个等于运算符 === 的作用类似传统的等于运算符:如果两侧的表达式有着相同的类型和相同的值,那么计算结果为true。而双等于运算符,会只强制比较它们的值。因此,总体上而言,使用 ===而不是 ==的做法更好。 !==vs !=亦是同理。


更多培训课程,学习资讯,课程优惠等学校信息,请进入 北京海淀区IT培训北京海淀区php培训北京海淀区java培训 网站详细了解,免费咨询电话:400-998-6158

预约试听
  • 姓名: *
  • 性别:
  • 手机号码: *
  • QQ:
  • 微信:
  • 其它说明:
  • 验证码: *  看不清,请点击刷新
相关课程