再读《js高级程序设计》

还是从基础开始吧,一直处于似懂非懂的状态,基础不够扎实!


1.传递方式有按值传递和按引用传递,按引用传递实际上传递的是复制这个引用类型的指针,按值传递,传递这个值的副本,

按函数是按值传递,且js没有重载,并且任何时候都会返回值,如果未指定,则返回undefided,使用argumes[]来访问变量

function a(obj){
	obj.name="1";
	obj=new Object();
	obj.name="2";
	alert(obj.name);
	return obj;
}
//1
var aa=new Object();
aa.name="3";
var bb=a(aa);
alert(bb.name);//2
alert(aa.name);//1


2.基本数据类型为undefined、null、bool、number、string,一种复杂数据类型Object


①object就是一组数据和功能的组合,object动态属性添加删除;

②bool类型

然后引申出平常做的if判断:

http://blog.youkuaiyun.com/zhangchuccc/article/details/6073217

再查看一下博客文章关于bool的解读:

http://blog.youkuaiyun.com/gudanyehai/article/details/6089255

一个值为 true 或者 false 的表达式。如果需要,非 Boolean 表达式也可以被转换为 Boolean 值,但是要遵循下列规则:

  • 所有的对象都被当作 true。
  • 当且仅当字符串为空时,该字符串被当作 false。
  • null 和 undefined 被当作 false。
  • 当且仅当数字为零时,该数字被当作 false。 
  • "0"会被当做true,但是下面这个问题就来了:
if("0"){
   console.log("aa");
}else{
   console.log("bb")
}//输出aa

console.log("0" == true);//输出false
console.log("0" == false);//输出true



3.typeof和insistantof检测数值类型

typeof用于检测基本数据类型,insistance用于检测引用类型。

typeof 1   number
function a(){}
var b={1,2,3}
typeof  a  function
typeof b object

4.操作符

a++和++a的区别,++a先执行加法再往下运算

位操作符 ~、|、>>、<<、>>>、<<<、^、

补码、反码、


5.作用链,可以使用with和try--catch延长作用于链


6.执行环境,分为全局和函数执行环境



7.对象的创建

创建:记住前提是引用类型。

在js中,对象是指无序键值对的组合。

说是对象的创建,倒不如说是类的定义和实例化。

不要混淆对象和对象实例。

首先别被这些模式吓到,无非就是基于Object的、把函数自身当做构造函数的(constructor)、原型(prototype)的这几种。

基于object的无法解决对象识别的问题;

基于构造函数的,无法解决类方法复用的问题;

基于原型,无法解决

①自定义对象Object实例

对象属性进行赋值操作,其实js引擎内部会进行一次get和set操作,当然你也可以自定义这种get和set操作。

var obj={

name:"Greg"

};

var obj=new Object();

obj.name="Greg";


这是创建对象的一种方式,但是无法解决对象识别的问题,以为使用instanseof时,返回都是Object


以下是工厂模式:

function creatPerson(){

var o=new Object();

o.name="Greg";

return 0;

}

var person1=cretPerson();


②构造函数模式


构造函数也可以像普通函数一样使用。

fucntion Person(){

this.name="Greg";

}

var person1=new Person();

console.log(person1.name);

创建对象的过程:

(1)先创建一个对象;

(2)将构造函数的作用域赋给新对象;

(3)执行构造函数的代码,给对象添加属性

(4)返回新对象




③原型模式

我们创建的每一个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,

prototype就是通过调用构造函数的那个对象实例的原型对象,这里请区分函数的原型属性和函数的原型属性指向的原型对象。

关于这种属性的添加问题,先从自身找属性,如果没有,则到原型对象中去找。

function Person(){}

Person.prototype.name="Greg";

var person1=new Person();

var person2=new Person()

person1.name=“Lily”;

console.log(person2.name)  //Lily

p1和p2共有一个Prototype对象

要查看原型对象,可以chorme中看_proto_


//下面这种写法重写了这个原型对象

Person.prototype={

name:“Greg”

}

//所以要把constructor属性加回来并使得他指向正确。

Person.prototype={

constructor:Person,

name:“Greg”

}



④构造函数原型模式

这是默认方式,也是最佳。

funciton Person(){
this.name="Greg";

}

Person.prototype.say=function(){

alert(this.name);

}

这样既解决了属性对于实例的私有和方法的共有。


8.继承的实现

原型链,利用原型让一个引用类型继承另一个引用类型的属性和方法。

构造函数、原型和实例的关系:

每个构造函数都有一个原型对象(他的prototype属性指向原型对象),原型对象都包含一个指向构造函数的指针(他的constructor属性指向构造函数),而实例都包含一个指向原型对象的内部指针([[proto]]).

①原型链继承

function Super(){
this.name="Greg";

}

function Sub(){}

Sub.prototype=new Super();


var sub1=new Sub();

sub1.name="lili";

var sub2=new Sub();

console.log(sub2.name)//lili

因为sub集成了super,super的name属性给了sub的原型对象,所以导致实例共有一个sub1的原型对象的属性name;


⑤构造函数继承

function Super(){
this.name="Greg";

}

function Sub(){

Super.call(this);//这样sub就有了super的name属性,但是父类的方法都要写在函数内部,函数复用无从谈起。

}

var sub1=new Sub();

sub1.name //Greg


③构造函数原型继承集合

function Super(){
this.name="Greg";

}

Super.prototype.say=function(){

alert(this.name);

}

function Sub(){

Super.call(this);//这样sub就有了super的name属性,但是下面sub的原型对象中其实还有name属性,只是没有访问罢了

}

Sub.prototype=new Super();


var sub1=new Sub();

sub1.name="lili";

var sub2=new Sub();

console.log(sub2.name)//lili


9.函数

js中命名函数的地位最高,在js加载时,会先找到函数,加到作用域连最前,比定义变量要高

所以可以理解

var a=1;

function a(){

alert(2);

}

a();

运行时报错“Number is not function”的问题,因为a重写了a()函数


闭包是指有权访问另一个函数作用域中的变量的函数;


<think>好的,我现在需要回答用户关于“程序设计语言”的问题。首先,我得明确用户的需求。用户可能想了解程序设计语言的基本概念、分类、作用以及常见例子。我需要确保回答结构清晰,分点说明,同时遵循系统级指令中的格式要求,比如数学表达式用$...$,独立公式用$$...$$,并且用中文回答。 首先,我应该从定义入手,解释什么是程序设计语言。然后,可以按照不同的分类方式展开,比如低级语言和高级语言,或者解释型、编译型等。接着,说明程序设计语言的主要作用,比如与计算机沟通、算法实现等。还要举一些常见的例子,比如C、Python、Java等,帮助用户更好地理解。 需要注意的是,用户可能对技术细节不太熟悉,所以要用通俗易懂的语言,避免过多专业术语。同时,检查是否有需要用到数学表达式的地方,比如算法复杂度表示,可能需要用$O(n^2)$这样的格式,确保符合系统要求。另外,每个部分要分段清晰,可能用编号或小标题,但用户要求结构清晰,所以分点列出比较合适。 还要确保LaTeX语法正确,比如变量用$包围,独立公式用$$。例如,在提到时间复杂度时,可以写成$O(n^2)$。如果有方程或公式,单独成段使用$$...$$。不过目前看来,程序设计语言的介绍中可能数学公式不多,但如果有涉及算法或计算的地方,需要注意格式。 最后,检查是否有遗漏的重要信息,比如程序设计语言的历史发展、当前流行的语言趋势,或者不同语言的应用场景。这些补充信息能让回答更全面。不过要控制内容量,避免过于冗长,保持简洁明了。 总结回答结构: 1. 定义 2. 分类(低级、高级;编译型、解释型) 3. 核心作用 4. 常见语言举例 5. 组成要素(语法、语义等) 6. 学习意义 需要确保每个部分自然衔接,用例子帮助理解,比如解释型语言如Python,编译型如C。同时,提到程序设计语言如何将人类可读的代码转换为机器指令,可能涉及编译器、解释器的作用,但不过于深入技术细节。 检查是否有需要纠正的地方,比如是否正确区分了低级和高级语言,例子是否准确。此外,是否遵循了所有系统指令,特别是LaTeX格式和结构要求。确认无误后,组织语言,形成连贯的回答。</think>程序设计语言是用于定义计算机程序的一套规则和符号系统,允许开发者以人类可读的形式编写指令,再通过编译器或解释器转换为机器可执行的代码。以下是逐步介绍: --- ### 1. **定义与作用** 程序设计语言的核心作用是**充当人与计算机之间的桥梁**。 - 开发者通过代码描述算法和逻辑,例如用循环计算累加和: $$ \sum_{i=1}^{n} i = \frac{n(n+1)}{2} $$ - 计算机通过编译/解释过程将代码转换为二进制指令(如机器码$00101101$)。 --- ### 2. **分类方式** #### (1) **按抽象级别** - **低级语言**:直接操作硬件,如**汇编语言**(指令如`MOV AX, 5`)。 - **高级语言**:更接近自然语言,如**Python**(`print("Hello")`)、**C++**。 #### (2) **按执行方式** - **编译型语言**(如C、Go): 代码通过编译器一次性转换为机器码,执行效率高。 - **解释型语言**(如Python、JavaScript): 逐行解释执行,灵活性更强。 --- ### 3. **核心组成要素** - **语法**:代码的书写规则,例如在C中,语句以分号结尾: ```c int x = 5; // 分号不可省略 ``` - **语义**:代码的逻辑含义,例如`x + y`表示求和。 - **数据类型**:如整数(`int`)、浮点数(`float`)、布尔值(`bool`)。 --- ### 4. **常见语言与应用场景** - **Python**:数据分析、人工智能(易读性强,库丰富)。 - **Java**:企业级应用(跨平台特性)。 - **JavaScript**:网页交互(如动态效果$f(x) = \sin(x)$)。 - **C/C++**:系统开发、游戏引擎(高性能需求)。 --- ### 5. **学习意义** - **实现算法**:例如用代码实现排序算法$O(n \log n)$。 - **自动化任务**:如批量处理文件或数据。 - **技术创新**:从手机应用到人工智能,均依赖程序设计语言。 --- ### 总结 程序设计语言是计算机科学的基石,其选择需结合场景(如性能、开发效率)。掌握一门语言后,学习其他语言会更轻松,因为核心逻辑(如循环、条件判断)是相通的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值