JavaScript中this指向

对于JavaScript初学者来说,this指针的指向问题一直是很混乱的问题。在不同的场景下,this会化身不同的对象。有一种观点认为,只有正确掌握了
JavaScript 中的 this 关键字,才算是迈入了 JavaScript
这门语言的门槛。在主流的面向对象的语言中(例如Java,C#等),this 含义是明确且具体的,即指向当前对象。一般在编译期绑定。而
JavaScript 中this 在运行期进行绑定的,这是JavaScript 中this 关键字具备多重含义的本质原因。

随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象

1、 指向window的隐式指向

1
2
3
4
5
function sayHello(){
this.nama = "tsrot";
console.log("hello " + this.name);
}
sayHello() //hello tsrot

more >>

各阶段前端工程师都应该具备什么能力(JS篇)

作为一名程序猿、攻城狮,要清楚自己的实力,自己所处的阶段,这样才能更好的扬长补短。常问自己几个问题:我最擅长什么,我比别人有哪些优势?我的短板在哪些方面?我在整个行业所处什么阶段,在这个阶段我该如何提升自己?
对于前端工程师等级的划分,每个人都可能有自己的理解,正所谓,一千个读者就有一千个哈姆雷特。下面是我对前端工程师划分的一些拙见。

一、入门菜鸟

这个阶段一般具备以下几点:

  • 基础的JavaScript编程能力
  • 基本能看懂别人写的代码
  • 有一定的代码调试能力

举些例子:

1、怎样对字符串进行截取操作,你会想到哪些方法?

substr() ,sibString(), split(), slice() …

2、给你一段代码,你能知道这段代码实现了什么功能,别人为什么要这么写?

1
2
3
4
5
6
var url = window.location.href;
if(url === 'http://www.xieliqun.com'){
window.location.href = 'https://github.com/tsrot';
}else{
window.location.href = '/404';
}

more >>

html5 API postMessage跨域详解

地址:http://blog.xieliqun.com/2016/08/25/postMessage-cross-domain/

window.postMessage(message,targetOrigin) 方法是html5新引进的特性,可以使用它来向其它的window对象发送消息,无论这个window对象是属于同源或不同源,目前IE8+、FireFox、Chrome、Opera等浏览器都已经支持window.postMessage方法。


准备

跨域是什么,我就不详细解释了,我相信你在看这篇文章前就已经了解的差不多了。现在我就直接进入实战阶段。

两个服务器

先建立两个不同域的测试环境。我用http-server(一个node服务器插件)建立了两个不同端口的本地服务器。

more >>

JavaScript闭包(closure)

地址:http://blog.xieliqun.com/2016/08/07/javascript-closure/

JavaScript变量分为全局变量和局部变量。Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量,而在函数外部自然无法读取函数内的局部变量。当你需要在函数外调用函数内的局部变量时,此时就要用到一些方法。这个过程就是闭包。

###一、JavaScript为什么会有闭包这种东西
JavaScript没有像其它后端语言一样可以直接定义一个变量可供其它外部函数调用的关键字或者方法。于是就产生了闭包这种东西。举个例子:

1
2
3
4
5
6
//内部函数可以访问外部变量
var name = "tsrot";
function f1(){
console.log(name);
}
f1(); //tsrot

more >>

深入了解JavaScript,优化作用域链(2)

地址:http://blog.xieliqun.com/2016/10/06/scope-chain-2/

作为一个良好的开发者必需考虑程序的运行性能,作用域链的层级关系是JavaScript性能优化的一个重要部分。因为这关系到变量在内存里的读写速度。


尽量使用局部变量

从作用域链的结构可以看出,在执行上下文的作用域链中,标识符所在的位置越深,读写速度就会越慢。

全局变量总是存在于执行上下文作用域链的最末端,因此在标识符解析的时候,查找全局变量是最慢的,并且全局变量将常驻内存直到程序退出,而局部变量会在函数运行完直接销毁。所以,在编写代码的时候应尽量少使用全局变量,尽可能使用局部变量。

一个好的经验法则是:如果一个跨作用域的对象被引用了一次以上,则先把它存储到局部变量里再使用。例如:

more >>