Javascript 作用域&对象简单说明

作用域

通常来说,一段程序代码中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。作用域的使用提高了程序逻辑对的局部性,增强了程序的可靠性,减少了名字冲突

全局作用域:
整个script标签或者是单独的js文件

var num = 10;

局部作用域:
在函数内部就是局部作用域,这个代码的名字只在函数内起效果和作用

function fn(){
	局部作用域
}

变量作用域的分类
在js中,根据作用域的不同,变量可以分为两种全局变量和局部变量
全局变量:
在全局作用域下声明的变量叫做全局变量(在函数外部定义的变量)
全局变量在代码的任何位置都可以使用
特殊情况下,在函数内部使用var声明的变量也是全局变量

var num=10;
console.log(num);
function fn(){
	console.log(num);
}
fn();

局部变量:
在局部作用域下声明的变量叫做局部变量(在函数内部定义的变量)
局部变量只能在该函数内部使用
函数的形参实际上就是局部变量

function fun(){
	var num1=10; //num1就是局部变量只能在函数内部使用
}
fun();

从执行效率来看全局变量和局部变量
1、全局变量:只有浏览器关闭的时候才会销毁,比较占内存资源
2、局部变量:当我们程序执行完毕就会销毁,比较节约资源

作用域链:内部函数访问外部函数变量,采取的是链式查找的方式来决定取哪个值,这种结构称为作用域链(就近原则)
在这里插入图片描述
预解析
1、js引擎运行js分为两步:预解析和代码执行
(1)预解析 js以前宁会把js里面所有var 还有function 提升到当前作用域的最前面
(2)代码执行 按照代码书写的顺序从上往下执行
2、预解析分为变量预解析(变量提升)和函数预解析(函数提升)
(1)变量提升 把所有的变量声明提升到当前作用域的最前面,不提升赋值操作
(2)函数提升 把所有的函数声明提升到当前作用域的最前面,不调用函数

对象

在js中,对象是一组无需的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等
对象是由属性和方法组成的
属性:事物的特征,在对象中用属性来表示
方法:事物的行为,在对象中用方法来表示

创建对象的三种方式
在js中,现阶段我们可以采用三种方式创建对象(object)
利用字面量创建对象
利用new Object创建对象
利用构造函数创建对象

1、利用字面量创建对象
对象字面量:就是{}里面包含了表达这个事物(对象)的属性和方法。{}里面采取键值对的形式表示。键:相当于属性名 值:相当于属性值,可以时任意类型的值(数字类型、字符串类型、布尔类型、函数类型等)

var star={
	name:'小黑',
	age:10,
	sex:'男',
	sayHi:function(){
		alert('Hello');
	}
};

对象调用:
对象里面的属性调用:对象.属性名,这个小点就理解为"的"
对象里面属性的另一种调用方式:对象[‘属性名’],注意方括号里面的属性必须加引号
对象里面的方法调用:对象.方法名(),注意这个方法名后面一定加括号

console.log(star.name);		//调用名字属性
console.log(star['name'])		//调用名字函数
star.sayHi();		//待用sayHi方法注意,一定不要忘记带后面的括号

总结
变量:单独声明赋值,单独存在
属性:对象里面的变量称为属性,不需要声明,用描述该对象的特征
函数:单独存在的,通过’函数名()'的方式就可以调用
方法:对象里面的含税称为方法,方法不需要声明

构造函数
是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初值,他总与 new 运算符一起使用,我们可以把对象中的一些公共属性和方法取出来,然后封装到这个函数里面

new在执行时会做四件事情:
1.在内存中创建一个新的空对象
2、让this 指向这个新的对象
3、执行构造函数里面,给这个新对象添加属性和方法
4、返回这个新对象(构造函数里面不需要return)

ex:

var obj = new Object();
obj.uname = 'zxyyy';
obj.age = 16;
obj.sex = '男';
obj.sayHi = function(){
	console.log('Hello');
}

因为我们一次创建一个对象,里面很多属性和方法是大部分相同的
因此我们可以利用函数的方法 重复这些相同的代码 我们就把这个函数称为 构造函数
又因为这个函数不一样,里面封装的不是普通代码 而是对象
构造函数 就是把我们对象里一些相同的属性和方法抽象出来封装到函数里面

构造函数名字的首字母要大写
构造函数不需要 return 就可以返回结果
调用构造函数必须时用new

举个栗子:

function Star(uname,age,sex){
		this.name=uname;
		this.age=age;
		this.sex=sex;
}
var zxy = new Star('zxyyy',16,'男');
console.log(zxy);

效果如图:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值