达内IT教育-武汉校区
4000336031

位置:搜学搜课 > 新闻 > 武汉达内web前端培训学校地址-电话

web工程师培训

Web前端全栈 应运而生 前景光明

科技从未停下前进的脚步,Web前端全栈式强势来袭!

了解更多web前端详情

达内Web前端课程 紧跟时代步伐

前端课程全面升级为Web前端全栈式

  • 课程升级 —— 课程结合了前端H5,后端node.JS和移动端APP开发
  • 实时更新 —— 达内课程实时更新,融合时下前沿技术热点
  • 项目实战 —— 主流项目贯穿课程,讲师手把手指导突破50000行代码
  • 自主项目 —— 真实部署,自命题醒目,独立完成自命题项目
  • 企业接轨 —— 课程以就业为导向,企业的要求就是我们的重点

达内Web前端课程, 源自企业需求

科技从未停下前进的脚步,Web前端全栈式强势来袭!

  • 阶段
  • WEB开发基础
  • 数据库、 H5 基础、WEB SERVR、核心、Ajax
  • 第二阶段
  • WEB核心技术
  • CSS3、H5、Js、 jQuery DOM编程
  • 第三阶段
  • WEB前端进阶
  • Bootstrap、VueJS、AngularJS

  • 第四阶段
  • 移动端开发
  • Web APP、微信开发、 React.js Native"、混编APP 框架
  • 第五阶段
  • WEB全栈进阶
  • node.js、 常用JS 框架

  • 辅导计划
  • Node.Js辅导
  • MongoDB、Node.js

课程详情

Web前端项目驱动教学 所需即所学,所学即所用

参与企业真实的项目积累实战经验

  • 真实商业项目
  • 真实企业项目实战,成立项目专项小组,团队完成。
  • 课程贯穿
  • 企业核心项目贯穿全课程,培养Web大局观
  • 项目部署上线
  • 云服务器真实部署,项目上线,投入使用。
  • 接轨企业
  • 真实对接企业,标准化,规范化,流程化的工作流。
  • 50000行代码
  • 实战讲师手把手教学,完成50000行代码。
  • 自主项目
  • 学员自主完成3个不低于10000行代码的项目。

通过学习你也可以拿出这样的作品

用作品说话,让你的简历丰富多彩

  • Visfocus
  • 基于swiper插件实现页面的整屏显示,轮播和切换,可通过菜单栏和右侧切换图标进行页面切换

  • 效果预览
  • 八戒网
  • 基于html+css布局,定位与浮动,原生js制作选项卡等内容,实现不同模块形式显示,文字的交互效果,导航切换,较终实现电商平台首页。
  • 效果预览
  • BRTV
  • 基于css3, media媒体查询实现响应式布局,搭建企业整个网站,实现轮播图切换,导航栏切换,切入子页面,页面动态效果等。
  • 效果预览
更多作品预览

Web前端项目驱动教学 所需即所学,所学即所用

参与企业真实的项目积累实战经验

讲师团阵容豪华 云集实战讲师

从实战中走出的讲师,传授真实项目经验

  • 王春梅
  • Web前端课程总监

  • 哈尔滨工业大学硕士,曾任用友软件股份有限公司前经验丰富项目经理,具备多年的的软件设计和开发经验,作为项目经理和主要设计人员,主持开发过多个产品,具有丰富的产品和项目的实战经验和管理经验。
  • 赵旭
  • 达内集团互联网技术讲师
  • 曾工作于吉林省统计局、启明信息技术有限公司、日本インタセクト株式会社等机构担任系统开发工程师、前端开发工程师等工作。具备多年互联网程序开发经验。多年Java EE /.NET / Html + Css /Javascript/ jQuery / Ajax技术的开发及授课经验。
  • 张东
  • 达内集团JavaScript讲师
  • 美国PMP认证项目经理,微软认证解决方案开发讲师。先后在中软国际、中国搜索、太极计算机担任开发工程师,架构师,项目经理。曾担任中央外汇管理中心、中国石油、二炮工程研究院、首都国际机场技术咨询顾问。
  • 杨燕
  • 达内集团Web技术讲师
  • 多年互联网领域研发经验,包括商务网站、管理系统、移动应用等研发经验。曾参与 研发的项目涉及领域包括航天系统、总参谋部队、华北电网等,并在大唐电信任职工程师期间积累了丰富的教学实战经验。
更多讲师在线咨询
新闻详情

武汉达内web前端培训学校地址-电话

来源:达内IT教育-武汉校区时间:2019/10/19 16:32:15 浏览量:247

今天小编要跟大家分享的文章是关于Web前端人员应该知道的JavaScript常见BUG及修复方法。JavaScript看上去是一门十分简单的语言,然而事实并不如此。它有很多容易被弄错的细节,一不注意就导致BUG。今天小编就为大家分享10个JavaScript常见的bug及修改方法下面我们一起来看一看吧!

1、错误的对this进行引用

在闭包或则回调中,this关键字的作用域很容易弄错。举个例子:

Game.prototype.restart = function () {

this.clearLocalStorage();

this.timer = setTimeout(function() {

this.clearBoard(); // 此处this指的是?

}, 0);

};

如果执行上面的代码,我们会看到报错:

Uncaught TypeError: undefined is not a function

出错的原因在于:当你调用setTimeout函数,你实际上调用的是window.setTimeout()。在setTimeout中传入的匿名函数是在window这个对象环境下,所以this是指向window,但是window并没有clearBoard方法。

如何解决呢?定义新的变量引用指向Game对象的this,然后就可以使用啦。

Game.prototype.restart = function () {

this.clearLocalStorage();

var self = this; // 将this指向的对象绑定到self

this.timer = setTimeout(function(){

self.clearBoard();

}, 0);

};

或则使用bind()函数:

Game.prototype.restart = function () {

this.clearLocalStorage();

this.timer = setTimeout(this.reset.bind(this), 0); // bind to 'this'

};

Game.prototype.reset = function(){

this.clearBoard(); // 此处this的引用正确

};

2、和块作用域(block scope)有关的BUG

在大多数程序语言中,每一个函数块都有一个独立的新的作用域,但是在JavaScript中并不是。例如:

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

/* ... */

}

console.log(i); // 会输出什么呢?

通常在这种情况下,调用console.log()会输出undefined或则报错。不过呢,这里会输出10。在JavaScript中,即使for循环已经结束,变量i依然存在,并且记录后的值。有些开发者会忘记这一点,然后导致许多bug。我们可以使用let而不是for来杜绝这一问题。

3、内存泄漏

你需要监控内存使用量,因为泄露很难避免。内存泄露可能由于引用不存在的对象或则循环引用导致。

· 如何避免:关注对象的可访问性(reachability)。

· 可访问的对象:

§ 现有的call stack任何位置可以访问的对象

§ 全局对象

当一个对象可以通过引用访问到,那么会在内存中保存。浏览器的垃圾回收器仅仅会把那些不可访问的对象回收。

4、混淆的相等判断

JavaScript自动将所有在布尔环境下的变量类型转换为布尔类型,但是可能导致bug。举例:

// 所有都是true

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

console.log(null == undefined);

console.log(" \t\r\n" == 0);

console.log('' == 0);

// 注意:下面两个也是

if ({}) // …

if ([]) // …

{}和[]都是对象,他们都会被转换为true。为了防止bug出现,推荐使用===和!==来做比较,因为不会隐式做类型转换。

5、低效的DOM操作

在JavaScript中,你可以轻松操作DOM(添加、修改和删除),但是开发者往往很低效地去操作。这会导致bug出现,因为这些操作非常耗费计算资源。为了解决这个问题,推荐使用文档碎片(Document Fragment),如果你需要操作多个DOM元素。

6、在for循环中错误的定义函数

举例:

var elements = document.getElementsByTagName('input');

var n = elements.length; // 假设我们有10个元素

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

elements[i].onclick = function() {

console.log("元素编号#" + i);

};

}

如果我们有10个元素,那么点击任何一个元素都会显示“元素编号#10”!因为在onclick被调用的时候,for循环已经结束,因此所有的i都是10。

解法:

var elements = document.getElementsByTagName('input');

var n = elements.length; // 假设有10个元素

var makeHandler = function(num) { // outer function

return function() { // inner function

console.log("元素编号##" + num);

};

};

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

elements[i].onclick = makeHandler(i+1);

}

makeHandler在for循环执行的时候立即被调用,获取到当前的值i+1,并且存储在变量num中。makeHandler返回一个函数使用num变量,该函数被绑定到元素的点击事件。

7、通过原型错误地继承

开发者如果没能正确理解继承的原理,那么就可能写出有bug的代码:

BaseObject = function(name) {

if(typeof name !== "undefined") {

this.name = name;

} else {

this.name = 'default'

}

};

var firstObj = new BaseObject();

var secondObj = new BaseObject('unique');

console.log(firstObj.name); // -> 输出'default'

console.log(secondObj.name); // -> 输出'unique'

但是,如果我们做如下操作:

delete secondObj.name;

那么:

console.log(secondObj.name); // -> 输出'undefined'

而我们实际上想要的结果是打印默认的name。

BaseObject = function (name) {

if(typeof name !== "undefined") {

this.name = name;

}

};

BaseObject.prototype.name = 'default';

每一个BaseObject都继承name属性,并且默认值为default。此时如果secondObj的name属性被删除掉,通过原型链查找会返回正确的默认值。

var thirdObj = new BaseObject('unique');

console.log(thirdObj.name); // -> 输出'unique'

delete thirdObj.name;

console.log(thirdObj.name); // -> 输出'default'

8、实例方法中的无效引用

我们来实现一个简单的构造函数用来创建对象:

var MyObject = function() {}

MyObject.prototype.whoAmI = function() {

console.log(this === window ? "window" : "MyObj");

};

var obj = new MyObject();

为了使用方便,我们定义变量whoAmI来引用obj.whoAmI:

var whoAmI = obj.whoAmI;

打印出来看看:

console.log(whoAmI);

控制台会输出:

function () {

console.log(this === window ? "window" : "MyObj");

}

现在我们来对比一下两者调用的区别:

obj.whoAmI(); // 输出"MyObj" (和期望一致)

whoAmI(); // 输出"window" (竟然输出了window)

当我们把obj.whoAmI赋值给whoAmI的时候,这个新的变量whoAmI是定义在全局下,因此this指向全局的window,而不是MyObj。如果我们真的要获取对MyObj的函数的引用,需要在其作用域下。

var MyObject = function() {}

MyObject.prototype.whoAmI = function() {

console.log(this === window ? "window" : "MyObj");

};

var obj = new MyObject();

obj.w = obj.whoAmI; // 任然在obj的作用域

obj.whoAmI(); // 输出"MyObj"

obj.w(); // 输出"MyObj"

9、settimeout/setlnterval函数个参数误用字符串

如果你将一个字符串作为setTimeout/setTimeInterval,它会被传给函数构造函数并构建一个新的函数。该操作流程很慢而且低效,并导致bug出现。

var hello = function(){

console.log("hello, fundebug !");

}

setTimeout("hello", 1000);

一个好的替代方法就是传入函数作为参数:

setInterval(logTime, 1000); // 将logTime函数传入

setTimeout(function() { // 传入一个匿名函数

logMessage(msgValue);

}, 1000);

10、未能成功使用strict mode

使用strict model会增加很多限制条件来加强安全和防止某些错误的出现,如果不使用strict mode,你就相当于少了一个得力的助手帮你避免错误:

· 更加容易debug

· 避免不小心定义了不该定义的全局变量

· 避免this隐式转换

· 避免属性名字或则参数值的重复使用

· eval()更加安全

· 无效地使用delete会自动抛出错误

以上就是小编今天为大家分享的关于Web前端人员应该知道的JavaScript常见BUG及修复方法的文章,希望本篇文章能够对正在从事web前端工作的小伙伴们有所帮助。想要了解更多web相关知识记得关注达内web培训。后祝愿小伙伴们工作顺利!

作者:fundebug

【免责声明:本文图片及文字信息均由小编转载自网络,旨在分享提供阅读,版权归原作者所有,如有侵权请联系我们进行删除。】

尊重原创文章,转载请注明出处与链接:http://www.soxsok.com/wnews88002.html 违者必究! 以上就是关于“武汉达内web前端培训学校地址-电话”的全部内容了,想了解更多相关知识请持续关注本站。

温馨提示:为不影响您的学业,来 武汉h5培训 校区前请先电话或QQ咨询,方便我校安排相关的专业老师为您解答
教学环境
  • 达内教学环境

    达内教学环境

  • 达内环境

    达内环境

  • 达内环境

    达内环境

预约申请
  • * 您的姓名
  • * 联系电话
  • * 报名课程
  •   备注说明
提交报名
版权所有:搜学搜课(www.soxsok.com) 技术支持:搜学搜课网