攻克闭包难题初学JavaScript的时候,我在学习闭包上,走了很多弯路。而这次重新回过头来对基础知识进行梳理,要讲清楚闭包,也是一个非常大的挑战。闭包有多重要?如果你是初入前端的朋友,我没有办法直观的告诉你闭包在实际开发中的无处不在,但是我可以告诉你,前端面试,必问闭包。面试官们常常用对闭包的了解程度来判定面试者的基础水平,保守估计,10个前端面试者,至少5个都死在闭包上。可是为什么,闭包如此重要,还是有那么...
~我们在学习JavaScript的过程中,由于对一些概念理解得不是很清楚,但是又想要通过一些方式把它记下来,于是就很容易草率的给这些概念定下一些方便自己记忆的有偏差的结论。危害比较大的是,有的不准确的结论在网上还广为流传。比如对于this指向的理解中,有这样一种说法:谁调用它,this就指向谁。在我刚开始学习this的时候,我是非常相信这句话的。因为在一些情况下,这样理解也还算说得通。可是我常常会在开发中遇到一些不一样的...
柯里化是函数的一个比较高级的应用,想要理解它并不简单。因此我一直在思考应该如何更加表达才能让大家理解起来更加容易。想了很久,决定先抛开柯里化这个概念不管,补充两个重要、但是容易被忽略的知识点。一、补充知识点之函数的隐式转换JavaScript作为一种弱类型语言,它的隐式转换是非常灵活有趣的。当我们没有深入了解隐式转换的时候可能会对一些运算的结果会感动困惑,比如4 + true = 5。当然,如果对隐式转换了解足够深刻,...
纵观JavaScript中所有必须需要掌握的重点知识中,函数是我们在初学的时候最容易忽视的一个知识点。在学习的过程中,可能会有很多人、很多文章告诉你面向对象很重要,原型很重要,可是却很少有人告诉你,面向对象中所有的重点难点,几乎都与函数息息相关。包括我之前几篇文章介绍的执行上下文,变量对象,闭包,this等,都是围绕函数来展开。我知道很多人在学习中,很急切的希望自己快一点开始学习面向对象,学习模块,学习流行框架...
我们在学习JavaScript的过程中,由于对一些概念理解得不是很清楚,但是又想要通过一些方式把它记下来,于是就很容易草率的给这些概念定下一些方便自己记忆的有偏差的结论。危害比较大的是,有的不准确的结论在网上还广为流传。比如对于this指向的理解中,有这样一种说法:谁调用它,this就指向谁。在我刚开始学习this的时候,我是非常相信这句话的。因为在一些情况下,这样理解也还算说得通。可是我常常会在开发中遇到一些不一样的...
初学JavaScript的时候,我在学习闭包上,走了很多弯路。而这次重新回过头来对基础知识进行梳理,要讲清楚闭包,也是一个非常大的挑战。闭包有多重要?如果你是初入前端的朋友,我没有办法直观的告诉你闭包在实际开发中的无处不在,但是我可以告诉你,前端面试,必问闭包。面试官们常常用对闭包的了解程度来判定面试者的基础水平,保守估计,10个前端面试者,至少5个都死在闭包上。可是为什么,闭包如此重要,还是有那么多人没有搞清...
开年之后工作热情一直不是很高,这几天一直处于消极怠工状态。早上不想起床,起床了不想上班。明明放假之前工作热情还一直很高,一直心心念念的想把小程序项目怼出来,结果休假回来之后画风完全不一样了。我感觉自己得了严重了节后综合征。还好撸了几篇文章,勉强表示这一周的时间没有完全浪费。这篇文章要给大家介绍的是变量对象。在JavaScript中,我们肯定不可避免的需要声明变量和函数,可是JS解析器是如何找到这些变量的呢?我...
我们在JS学习初期或者面试的时候常常会遇到考核变量提升的思考题。比如先来一个简单一点的。console.log(a); // 这里会打印出什么? var a = 20;暂时先不管这个例子,我们先引入一个JavaScript中最基础,但同时也是最重要的一个概念执行上下文(Execution Context)。每次当控制器转到可执行代码的时候,就会进入一个执行上下文。执行上下文可以理解为当前代码的执行环境,它会形成一个作用域。JavaScript中的运行环境大概包括三...
用JavaScript读取和保存文件 因为Google还不提供同步插件数据的功能,所以导入和导出插件配置就必须和文件打交道了。而出于安全原因,只有IE才提供访问文件的API;但随着HTML 5的到来,其他浏览器也纷纷支持了。 首先说读取文件。W3C提供了一些File API,其中最重要的是FileReader这个类。 先列出需要用到的HTML标签: <input type="file" id="file" onchange="handleFiles(this.files)"/> 当选择了一个...
JS截取字符串substr 和 substring方法的区别substr方法返回一个从指定位置开始的指定长度的子字符串。stringvar.substr(start [, length ])参数stringvar必选项。要提取子字符串的字符串文字或 String 对象。start必选项。所需的子字符串的起始位置。字符串中的第一个字符的索引为 0。length可选项。在返回的子字符串中应包括的字符个数。说明如果 length 为 0 或负数,将返回一个空字符串。如果没有指定该参数,则子字符串将延续到...
JS实现导入文件功能 项目开发过程中,需要实现文件上传功能。借此机会学习之。 使用HTML中现有的input type “file”可以支持这一功能。如下所示: <input ng-model="url" id="url" type="file"/> 浏览时只显示指定文件类型 <input type="file" accept="application/msword" ><br><br>accept属性列表<br> 1.accept="application/msexcel" 2.accept="application/msword" 3.accept="applica...
JS实现本地文件上传至阿里云服务器前言 在前面的博客《 JavaScript进阶(八)JS实现图片预览并导入服务器功能》(点击查看详情)中,实现了JS将本地图片文件预览并上传至阿里云服务器的操作。这次需要实现将本地打包好的文件上传至阿里云服务器。使用前面的图片文件上传方法无法完成此操作。操作界面如下: 思路 本地与服务端传输文件的格式应该是熟悉的Base64格式。首先需要将本地文件转换为Base64格式,传输至服务端后,在服...
JS array 数组详解数组的声明方法arrayObj = new Array(); //创建一个数组。 var arr1 = new Array(); arrayObj = new Array([size])//创建一个数组并指定长度,注意不是上限,是长度。 var a = new Array(5); arrayObj = new Array([element0], [element1], ...,[elementN])//创建一个数组并赋值。 var a = new Array(["b", 2, "a", 4,]); arrayObj = [element0, element1, ..., elementN]//创建一个数组并赋值的简写,注意这里中...
var a = 20; var b = abc; var c = true; var d = { m: 20 }因为JavaScript具有自动垃圾回收机制,所以对于前端开发来说,内存空间并不是一个经常被提及的概念,很容易被大家忽视。特别是很多不是计算机专业的朋友在进入到前端之后,会对内存空间的认知比较模糊,甚至有些人干脆就是一无所知。当然也包括我自己。在很长一段时间里认为内存空间的概念在JS的学习中并不是那么重要。可是后我当我回过头来重新整理JS基础时,发现由于对...
JS抽离公共函数问题 在经历了“大量”的项目开发后,发觉越来越多的方法可以被抽离出来作为一个公共方法使用。那么,在js中该思想又该如何实现呢?解答例如,以下方法用于实现将标准时间Thu Mar 19 2015 12:00:00 GMT+0800 (中国标准时间)转换为2015-03-19 12:00:00的格式。ShopStatementControllervar formatDateTime = function (date) { var y = date.getFullYear(); var m = date.getMonth() + 1; m = m < 10 ? (0 + m...