你自认为理解了JavaScript?【转】】的更多相关文章

深入理解:JavaScript原型与继承 看过不少书籍,不少文章,对于原型与继承的说明基本上让人不明觉厉,特别是对于习惯了面向对象编程的人来说更难理解,这里我就给大家说说我的理解. 首先JavaScript是一门基于原型编程的语言,它遵守原型编程的基本原则: 所有的数据都是对象(javascript中除了字符串字面量.数字字面量.true.false.null.undefined之外,其他值都是对象!) 要得到一个对象,不是通过实例化类,而是找到一个对象作为原型并克隆它 对象会记住它的原型 如果…
理解的javascript自定义事件 被我拖延了将近一个月的javascript事件模型系列终于迎来了第四篇,也是我计划中的最后一篇,说来太惭愧了,本来计划一到两个星期写完的,谁知中间遇到了很多事情,公司的个人的,搞的自己心烦意乱浮躁了一段时间,好在最近这些事情都一件件趋于平息,我也有了精力继续写文章. 这个自定义事件其实是挺让我纠结的,首先自己平时从未使用过,只是有一次遇到一个问题有人指点说可以用自定义事件,才对这个东西有了印象.在网上搜“javascript自定义事件”,发现也有不少文章在写…
今天面试的时候被问到一个问题,是关于 JS 异步的.当时我脑海中闪过了一个单线程的概念,但却没有把真正的原理阐述清楚.所以回来特意重新回顾了前面单线程和异步相关的一些知识点. 虽然之前学习的时候也接触了单线程模型相关的东西,但当时理解得并不是很清楚和明白.所以这道面试题也没有给出一语中的的答案.重新阅读阮一峰的 <JavaScript 运行机制详解>和我之前写的<setTimeout 异步与回调>之后.我决定重新写一篇博客来更加白话的总结 JS 的单线程机制和异步. 重演历史 -…
一.闭包(Closure) 1.1.什么是闭包? 理解闭包概念: a.闭包是指有权限访问另一个函数作用域的变量的函数,创建闭包的常见方式就是在一个函数内部创建另一个函数,也就是创建一个内部函数,创建一个闭包环境,让返回的这个内部函数保存要引用的变量,以便在后续执行时可以保持对这个变量的引用. b.只要存在调用内部函数的可能,JavaScript就需要保留被引用的函数.而且JavaScript运行时需要跟踪引用这个内部函数的所有变量,直到最后一个变量废弃,JavaScript的垃圾收集器才能释放相…
闭包引入的前提个人理解是为从外部读取局部变量,正常情况下,这是办不到的.简单的闭包举例如下: function f1(){ n=100; function f2(){ alert(n); } return f2; } var result=f1(); result(); 代码中的f2函数,就是闭包. function f1(){ var n=100; nAdd=function(){n+=1} function f2(){ alert(n); } return f2; } var result=…
被我拖延了将近一个月的javascript事件模型系列终于迎来了第四篇,也是我计划中的最后一篇,说来太惭愧了,本来计划一到两个星期写完的,谁知中间遇到了很多事情,公司的个人的,搞的自己心烦意乱浮躁了一段时间,好在最近这些事情都一件件趋于平息,我也有了精力继续写文章. 这个自定义事件其实是挺让我纠结的,首先自己平时从未使用过,只是有一次遇到一个问题有人指点说可以用自定义事件,才对这个东西有了印象.在网上搜“javascript自定义事件”,发现也有不少文章在写,不过说实话让我佩服的却一篇也没找到,…
目录 一.闭包(Closure) 1.1.什么是闭包? 1.2.为什么要用闭包(作用)? 1.2.1.保护函数内的变量安全. 1.2.2.通过访问外部变量,一个闭包可以暂时保存这些变量的上下文环境,当引用完毕后才会销毁. 1.3.闭包的经典示例 1.3.1.示例一 1.3.2.示例二 1.3.3.示例三 一.闭包(Closure) 1.1.什么是闭包? 理解闭包概念: a.闭包是指有权限访问另一个函数作用域的变量的函数,创建闭包的常见方式就是在一个函数内部创建另一个函数,也就是创建一个内部函数,…
首先需要先理解类和对象的意义,我个人理解如下: 类:对象的抽象化: 对象:类的实体: javascript中没有class关键字和类的用法,只能用伪类来做类的,所以要用function来定义累的名字: 如: function myClass(){ this.name="张三"; } 这样myClass方法才能用原型连接 prototype:这样才能扩展此类: 也可以用 new myClass();这个类 javascript中有对象,简单的写法就是 var obj={name:&quo…
关于Dmitry Baranovskiy 的博客中一篇文章(http://dmitry.baranovskiy.com/post/91403200),其中有五段小代码,用来测试是否理解 JavaScript 的核心,闭包和作用域,  该文章也在csdn论坛上受到过关注和讨论, 集思广益,下面结合自己的理解,做了如下小结. 1 if (!("a" in window)) { ; } console.log(a); 程序会首先解析所有声明的函数,其次是var声明的变量,因为javascri…
一个ArcGIS Javascript Viewer for JavaScript Widget是一组可以共享.迁移及部署到JavaScript View程序中的的文本文件.通常,一个程序员如果要开发一个或者一组Widgets会将他们封闭成一在一个Dojo模型中,如下图所示: 一个Widget可以是一个JavaScript文件一样简单.上述结构表示一个完整的Widget有自己的图标的小工具,模板,配置文件和国际化支持.通常情况下,一个Widget封装一组隔离的独立体和业务逻辑,允许用户进行任务.…
废话不多说,我们先来看几个例子: 1. setTimeout( console.log(2); result:  2 1   2.   console.log(100 setTimeout( console.log(300);  result:  100 300 200   3. function foo(){ console.log('first'); setTimeout((function(){console.log('second')}),0); } for(var i=0; i<10;…
本文为原创,转载请注明出处: cnzt       文章:cnzt-p 写在前面 一周木有更新了,今天终于攻克了自行车难关,非常开心,特意来一更~ (那些捂嘴偷笑的人我看到你们了快把嘴闭上我会假装没看见). 本文内容均基于个人理解,如有不认同,墙裂欢迎留言交流~~~ 正文 作用域 简单来说,javascript中有变量和函数的声明/定义,有变量赋值和函数的执行 ,且遵循先声明后执行原则,举个例子: var a = 1; // 表达式 function func(){ a = a + 1; };…
前文 总所周知,继承是所有OO语言中都拥有的一个共性.在JavaScript中,它的继承机制与其他OO语言有着很大的不同,尽管ES6为我们提供了像面向对象继承一样的语法糖,但是其底层依然是构造函数,所以理解继承的底层原理非常重要,所以今天让我们来探讨一下JavaScript中的继承机制. 原型与原型链 要理解继承,必须理解JavaScript中的原型与原型链,我在之前的上一篇文章对原型进行了深入的探讨,有兴趣的小伙伴可以看看~ <理解原型与原型链> 继承 在JavaScript中,有六种主要常…
闭包一直是js中一个比较难于理解的东西,而平时用途又非常多,因此不得不对闭包进行必要的理解,现在来说说我对js闭包的理解. 要理解闭包,肯定是要先了解js的一个重要特性, 回想一下,那就是函数作用域,作用域分全局和局部,由于作用域链的存在,全局变量能在任何地方被访问到,相反,局部变 量只能在局部访问,而无法在全局的作用域中被访问.因为如果你想访问某个局部变量,首先搜索当前作用域中的变量,如果没有,就会继续向上搜索,直到作用域顶端.先看一个 例子: var gl = 3; var foo = fu…
数组 arrayMax 返回数组中的最大值. 将Math.max()与扩展运算符 (...) 结合使用以获取数组中的最大值. const arrayMax = arr => Math.max(...arr); // arrayMax([10, 1, 5]) -> 10 arrayMin 返回数组中的最小值. 将Math.min()与扩展运算符 (...) 结合使用以获取数组中的最小值. const arrayMin = arr => Math.min(...arr); // arrayM…
第一题 if (!("a" in window)) { var a = 1; } alert(a); 第二题 var a = 1, b = function a(x) { x && a(--x); }; alert(a); 第三题 function a(x) { return x * 2; } var a; alert(a); 第四题 function b(x, y, a) { arguments[2] = 10; alert(a); } b(1, 2, 3); 第五题…
前言 将数据报表导出,是web数据报告展示常用的附带功能.通常这种功能都是用后端开发人员编写的.今天我们主要讲的是直接通过前端js将数据导出Excel的CSV格式的文件. 原理 首先在本地用Excel新建一个test.csv的文件 ===> 随便填写一些数据,保存并用Safari浏览打开该文件 ===> 打开浏览器的开发者工具,执行JSON.stringify(document.body.innerText);,我们得到结果如下图: 从图中,可以看出: CSV文件格式单元格之间是通过,隔开的…
引子 编程世界里只存在两种基本元素,一个是数据,一个是代码.编程世界就是在数据和代码千丝万缕的纠缠中呈现出无限的生机和活力. 数据天生就是文静的,总想保持自己固有的本色:而代码却天生活泼,总想改变这个世界.    你看,数据代码间的关系与物质能量间的关系有着惊人的相似.数据也是有惯性的,如果没有代码来施加外力,她总保持自己原来的状态.而代码就象能量,他存在 的唯一目的,就是要努力改变数据原来的状态.在代码改变数据的同时,也会因为数据的抗拒而反过来影响或改变代码原有的趋势.甚至在某些情况下,数据可…
一.柯里化 在定义柯里化.部分应用参数的概念前,首先必须对闭包有深入的了解和定义,闭包一句话说清楚:函数返回值为函数. 柯里化的定义:将多参函数分解为按步骤接受单个参数的函数,如下代码: var mod = function(a,b){ return a * b; } function curry2(fun){ var _funTwo = function(arg){ return function(two){ return fun(arg,two); } }; return _funTwo;…
JavaScript的setTimeout与setInterval是两个很容易欺骗别人感情的方法,因为我们开始常常以为调用了就会按既定的方式执行, 我想不少人都深有同感, 例如 setTimeout( function(){ alert('你好!'); } , 0);setInterval( callbackFunction , 100); 认为setTimeout中的问候方法会立即被执行,因为这并不是凭空而说,而是JavaScript API文档明确定义第二个参数意义为隔多少毫秒后,回调方法就…
1.关于leetcode 这是第一篇关于leetcode的题解,就先扯点关于leetcode的话. 其实很早前就在博客园看到过leetcode一些题解,总以为跟一般OJ大同小异,直到最近点开了一篇博文Leetcode 编程训练,无意间点进leetcode的主页看了下,乖乖,居然能用JavaScript提交代码(还能用python.ruby等)!瞬间来了兴趣,一口气把几十道水题都切完了,代码放在了github,有兴趣的可以参考或者帮忙review一下.对于个人认为有意思的题目,楼主也会时不时地写些…
容易欺骗别人感情的JavaScript定时器 JavaScript的setTimeout与setInterval是两个很容易欺骗别人感情的方法,因为我们开始常常以为调用了就会按既定的方式执行, 我想不少人都深有同感, 例如 setTimeout(function() { alert('你好!'); }, 0); setInterval(callbackFunction, 100); 认为setTimeout中的问候方法会立即被执行,因为这并不是凭空而说,而是JavaScript API文档明确定…
在讲到Obeject.defineProperty()方法之前先得说明一下ECMAScript中有两种属性:数据属性和访问器属性. 两种属性存在的意义:描述对象属性(key)的一些特性,因为这些属性是内部值,一般放到 [[两个中括号]]  中. Object.defineProperty(obj , 'key' , {描述信息,是个对象,类似配置项} )  方法接收三个参数,属性所在的对象,属性名 和一个描述符对象. 数据属性的描述符是下面的一个或者多个(configurable.enumera…
原文:http://www.cnblogs.com/sharpxiajun/archive/2011/09/16/2179323.html javascript笔记:深入理解javascript的function   Function是javascript里最常用的一个概念,javascript里的function是最容易入手的一个功能,但它也是javascript最难理解最难掌握的一个概念. 一.我的第一个javascript代码 1 function test() 2 { 3 alert('…
说明:最近写 js 时需要用setinterval函数做定时操作,谁知道,刚开始后运行完好,但一段时间后他就抽风了,定时任务运行的时间间隔越来越短,频率加快,这是一个完全不能容忍的问题,带着一个可以出现问题,但不能无视问题的信念我就出发了,最后终于找到了这篇文章,文章写的相当好,光收藏已是不够,所以就转载于此. 原文地址:JavaScript可否多线程? 深入理解JavaScript定时机制 JavaScript的setTimeout与setInterval是两个很容易欺骗别人感情的方法,因为我…
原文:JavaScript闭包的一些理解 简单一点的说:闭包就是能够读取其他函数内部变量的函数.那如何实现读取其它函数内部变量呢,大家都知道在JavaScript中内部函数可以访问其父函数中的变量,那如果将内部函数返回是不是代表能够通过它访问其父函数中的变量了呢,闭包的原理事实上就是这样. 摘录 闭包就是能够读取其他函数内部变量的函数.由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数". 闭包的主要作用: 可以读…
首先,你要理解在javascript中,每当一个新函数创建时,都会生成一个prototype属性,我们管它叫做原型对象.看一个例子: function foo(){ this.name='qiangqiang'; this.age=23; this.colors=['red','orange','yellow']; } foo.prototype.z=2; console.log(foo.prototype); 查看一下foo.ptototype 看以看到foo的原型对象的结构,有一个构造函数,…
JavaScript中的this其实没传说中的那么难,也没那么乱. 我们来分析下,this主要是跟它的执行环境有关. 而通常情况下,this都是放在函数体中或可执行的JS代码中(函数体除外). 至于JS可执行代码中的this,用的不多,所以本文举例较少. 至于函数体中的this,我们只要弄清楚this所处的函数体是谁在调用,不就知道this是谁了吗? 注意:此文中的函数调用,是指该函数作为某对象的一个属性方法被执行,而不是单纯的在某个对象的作用域中执行就是调用 -----------------…
replace方法是属于String对象的,可用于替换字符串. 简单介绍: StringObject.replace(searchValue,replaceValue) StringObject:字符串 searchValue:字符串或正则表达式 replaceValue:字符串或者函数 字符串替换字符串           JavaScript   1 'I am loser!'.replace('loser','hero')//I am hero! 直接使用字符串能让自己从loser变成he…
首先看我们的源代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>深入理解Javascript</title> <script type="text/javascript" charset="utf-8"> console.log(this); </script> <…