《JavaScript核心概念》基础部分重点摘录
注:《JavaScript核心概念》适合深入了解JavaScript,比我买的《JavaScript框架设计》语言和内容丰富多了(可能是我水平尚浅吧)。
1. 作用域
var herp=”one”;
{
var herp=”two”;
}
alert(herp); //two,
上面这个很简单,那看看下面这两个。
//代码1
var str="global";
function scopteTest(){
alert(str); //
str="local";
alert(str); //
}
这里1和2会输出什么呢?
//代码2
var str="global";
function scopteTest(){
alert(str); //3
var str="local";
alert(str); //4
}
这里3和4又会输出什么呢?
答案:1、2、3、4分别输出
global
local
undefined
local
很神奇吧,尤其是第三个,详情去看《JavaScript核心概念》吧。
大致原理:JavaScript的作用域是词法作用域。在代码2中,词法分析结束后,str变量 已经加入到 scopteTest函数局部作用域了,即整个函数内部已经知道自己内部有个 str,当然就不再去访问 外部的 str了。但由于 //3 处于 变量的 定义 之前,所以 会输出 undefined。
2. 经典的闭包例子
//例子1
var outter=[];
function closureTest(){
var array=["one","two","three","four"];
for(var i=0; i<array.length; i++){
var x={};
x.no = i;
x.text = array[i];
x.invoke = function( i ){
print(i);
};
outter.push(x); }
} closureTest();
print(outter[0].invoke());
print(outter[1].invoke());
print(outter[2].invoke());
print(outter[3].invoke());
//例子2
var outter=[];
function closureTest(){
var array=["one","two","three","four"];
for(var i=0; i<array.length; i++){
var x={};
x.no = i;
x.text = array[i];
x.invoke = function( no ){
return function(){
print(no);
}
}(i);
outter.push(x); }
} closureTest();
print(outter[0].invoke());
print(outter[1].invoke());
print(outter[2].invoke());
print(outter[3].invoke());
例子1输出:
4
4
4
4
例子2输出:
0
1
2
3
3. JavaScript函数的创建
创建JavaScript函数的一种不长用的方式(几乎没有人用)是通过new操作符来作用于Function“构造器”:
var funcName = new Function( [argname1, [... argnameN,]] body );
参数列表中可以有任意多的参数,然后紧跟着是函数体,比如:
var add = new Function("x", "y", "return(x+y)"); print(add(2, 4));
但更常用的是通过字面量来创建函数:
function add(x, y){ return x + y; }
4. new 一个函数的实质过程
在JavaScript中,通过 new 操作符,来作用一个函数,实质过程是这样的:
首先,创建一个空对象,然后用函数的 apply 方法,将这个空对象传入作为 apply 的第一个参数,及上下文参数。这样函数内部的this将会被这个空对象所替代。
例如:
var triangle = new Shape("triangle");
//相当于下面:
var triangle = {};
Shape.apply(triangle, ["triangle"]);
《JavaScript核心概念》基础部分重点摘录的更多相关文章
- javascript 核心概念(1)-数据类型
语法 (1)到现在为止,大多数浏览器也还是支持到ECMAScript 第三版的标准. 核心概念就是一个语言的基本工作原理,涉及语法,操作符,数据类型. (2)javascript的一切--变量,函数名 ...
- javascript核心概念之——数组
在javascript中数组就是一个可以存放任何类型的集合.存储在数组中的值用逗号分隔 var arr = ["hello",7,null,undifined,obj,undifi ...
- javascript核心概念——new
如果完全没有编程经验的朋友看到这个词会想到什么? 上过幼儿园的都知道new表示 "新的" 的意思. var a = new Date() 按照字面的意思表示什么? 把一个新的dat ...
- 掌握 javascript 核心概念 最好的教程 系列 之一
链接 新链接 函数优先, 在扫描创建变量阶段, 会先收集函数, 如果前面有同名函数或者变量, 这个新函数会覆盖前面同名的: 而如果这时候是变量, 则不能去覆盖前面已有的值. function test ...
- Javascript本质第一篇:核心概念
很多人在使用Javascript之前都至少使用过C++.C#或Java,面向对象的编程思想已经根深蒂固,恰好Javascript在语法上借鉴了Java,虽然方便了Javascript的入门,但要深入理 ...
- 学习 JavaScript (三)核心概念:语法、变量、数据类型
JavaScript 的核心概念主要由语法.变量.数据类型.操作符.语句.函数组成,这篇文章主要讲解的是前面三个,后面三个下一篇文章再讲解. 01 语法 熟悉 JavaScript 历史的人应该都知道 ...
- JavaScript编程:javaScript核心基础语法
1.javaScript核心基础语法: javaScript技术体系包含了5个内容: 1.核心语言定义: 2.原生对象和雷子对象: 3.浏览器对象 ...
- 学习 JavaScript (四)核心概念:操作符
JavaScript 的核心概念主要由语法.变量.数据类型.操作符.语句.函数组成,前面三个上一篇文章已经讲解完了.后面三个内容超级多,这篇文章主要讲解的是操作符. 操作符 什么叫做操作符? 这是一种 ...
- 2.基础:Vue组件的核心概念
一.组件基础和注册 组件概念 组件系统是 Vue 的另一个重要概念,他的核心就是封装和复用. 细节 组件的name必须是全局唯一. 二.属性.事件和插槽 组件的三大核心概念:属性.事件和插槽. 属性, ...
随机推荐
- Spring Framework jar官方直接下载路径
SPRING官方网站改版后,建议都是通过 Maven和Gradle下载,对不使用Maven和Gradle开发项目的,下载就非常麻烦,下给出Spring Framework jar官方直接下载路径: h ...
- Session,ViewState用法
基本理论: session值是保存在服务器内存上,那么,可以肯定,大量的使用session将导致服务器负担加重. 而viewstate由于只是将数据存入到页面隐藏控件里,不再占用服务器资源,因此, ...
- Eclipse出现the type java.lang.CharSequence can't be resolved.
出现这个问题我们需要安装一下JRE1.7这个版本,然后再项目里引入一下就可以了.
- Windows环境下使用cygwin ndk_r9c编译FFmpeg
一.废话 最近学习,第一步就是编译.我们需要编译FFmpag,x264,fdk_aac,一步步来.先来讲一下FFmpeg,网上说的很多都是几百年前的,我亲测完美可用 联系我可以直接评论,也可以加我Q ...
- CorAnimation7-高效绘图、图像IO以及图层性能
高效绘图 软件绘图 术语绘图通常在Core Animation的上下文中指代软件绘图(意即:不由GPU协助的绘图).在iOS中,软件绘图通常是由Core Graphics框架完成来完成.但是,在一些必 ...
- (转)JS页面间传值
一:JavaScript静态页面值传递之URL篇 能过URL进行传值.把要传递的信息接在URL上. 例子: 参数传出页面Post.htm—> <input type="text& ...
- 简单的背包变形HDU1203,HDU2955
今天一直在写背包,不过中间停了一段时间在写shell. 一直在做01背包.今天做了这两题很相似的背包 首先是HDU1203 Speakless很早就想出国,现在他已经考完了所有需要的考试,准备了所有要 ...
- Android Studio中JNI -- 1 -- 配置方法
1.配置NDK 1.1 下载NDK Android Studio 1.2 配 android-ndk-r10e,不同版本的Studio需要配置不同的ndk,下载完成后,随便解压放至某个文件目录下 1. ...
- 关于Apple设备私有的apple-touch-icon属性详解
以前我们用过favicon在浏览器给网站进行身份标识,用法如下: <link href="http://image.feeliu.com/web/favicon.ico" r ...
- Java单例模式深入详解
原文地址:http://www.cnblogs.com/hxsyl/ 仅作为笔记收藏…… 一.问题引入 偶然想想到的如果把Java的构造方法弄成private,那里面的成员属性是不是只有通过stati ...