0
点赞
收藏
分享

微信扫一扫

js笔记(四)

Java架构领域 2022-02-19 阅读 43

目录

作用域

全局作用域

变量的声明提前

函数的声明提前

函数作用域

this

对象

创建对象

利用字面量创建对象

对象的调用

利用 new Object 创建对象

利用构造函数创建对象

遍历对象的属性


作用域

作用域指一个变量的作用的范围

在JS中一共有两种作用域:

  • 全局作用域
  • 函数作用域

全局作用域

直接编写在script标签中的JS代码,都在全局作用域

全局作用域在页面打开时创建,在页面关闭时销毁

在全局作用域中有一个全局对象window,它代表的是一个浏览器的窗口,由浏览器创建,可以直接使用

在全局作用域中:

创建的变量都会作为window对象的属性保存
创建的函数都会作为window对象的方法保存
全局作用域中的变量都是全局变量,在页面的任意的部分都可以访问的到

变量的声明提前

使用var关键字声明的变量,会在所有的代码执行之前被声明

但是如果声明变量时不适用var关键字,则变量不会被声明提前

var a=3;
相当于
var a;
a=3;

函数的声明提前

使用函数声明形式创建的函数function

它会在所有的代码执行之前就被创建,所以我们可以在函数声明前来调用函数

fun();
function fun(){
onsole.log("   ");
}

函数作用域

 调用函数时创建函数作用域,函数执行完毕以后,函数作用域销毁

每调用一次函数就会创建一个新的函数作用域,他们之间是互相独立的

在函数作用域中可以访问到全局作用域的变量
在全局作用域中无法访问到函数作用域的变量
当在函数作用域操作一个变量时,它会先在自身作用域中寻找,

如果有就直接使用
如果没有则向上一级作用域中寻找,直到找到全局作用域
如果全局作用域中依然没有找到,则会报错
在函数中要访问全局变量可以使用window对象

var a=10;
function fun(){
var a=1;
  console.log(a); // a=1
  console.log(window.a); // a = 10
}

在函数作用域也有声明提前的特性,使用var关键字声明的变量,会在函数中所有的代码执行之前被声明

函数声明也会在函数中所有的代码执行之前执行

this

解析器在调用函数每次都会向函数内部传递进一个隐含的参数,这个隐含的参数就是this

this指向的是一个对象,这个对象我们称为函数执行的上下文对象

根据函数的调用方式的不同,this会指向不同的对象

以函数的形式调用时,this永远都是window
以方法的形式调用时,this就是调用方法的那个对象

对象

在 JavaScript 中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等。

对象是由属性和方法组成的:

  • 属性:事物的特征,在对象中用属性来表示(常用名词)
  • 方法:事物的行为,在对象中用方法来表示(常用动词)

创建对象

在 JavaScript 中,现阶段我们可以采用三种方式创建对象(object):

  • 利用字面量创建对象
  • 利用 new Object创建对象
  • 利用构造函数创建对象

利用字面量创建对象

对象字面量:就是花括号 {}  里面包含了表达这个具体事物(对象)的属性和

方法 { } 里面采取键值对的形式表示

  • 键:相当于属性名
  • 值:相当于属性值,可以是任意类型的值(数字类型、字符串类型、布尔类型,函数类型等)
 var ren = { 
         sex : '男',
         age : 18,
         say : function(){
             console.log('helloworld');
         }

     };

对象的调用

  • 对象里面的属性调用 : 对象.属性名 ,这个小点 . 就理解为“ 的 ”
  • 对象里面属性的另一种调用方式 : 对象[‘属性名’],注意方括号里面的属性必须加引号,我们后面会用
  • 对象里面的方法调用:对象.方法名() ,注意这个方法名字后面一定加括号
   var ren = { 
         sex : '男',
         age : 18,
         say : function(){
             console.log('helloworld');
         }

     };
     console.log(ren.sex);
     ren.say();

利用 new Object 创建对象

var obj = new Object(); //创建了一个空的对象
obj.age = 18;
obj.sex = '男';
obj.say = function() {
    console.log('helloworld');
}

console.log(obj.sex);
console.log(obj['sex']);
obj.sayHi();

利用构造函数创建对象

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

在 js 中,使用构造函数要时要注意以下两点:

  • 构造函数用于创建某一类对象,其首字母要大写
  • 构造函数要和 new 一起使用才有意义
//构造函数的语法格式
function 构造函数名() {
    this.属性 = 值;
    this.方法 = function() {}
}
var 变量名=new 构造函数名();
//1. 构造函数名字首字母要大写
//2. 构造函数不需要return就可以返回结果
//3. 调用构造函数必须使用 new
//4. 我们只要new Star() 调用函数就创建了一个对象
//5. 我们的属性和方法前面必须加this
function Star(uname,age,sex) {
    this.name = uname;
    this.age = age;
    this.sex = sex;
    this.sing = function(sang){
        console.log(sang);
    }
}
var ldh = new Star('刘德华',18,'男');
console.log(typeof ldh) // object对象,调用函数返回的是对象

console.log(ldh.name);
console.log(ldh['sex']);
ldh.sing('冰雨');
//把冰雨传给了sang

  • 构造函数名字首字母要大写
  • 函数内的属性和方法前面需要添加 this ,表示当前对象的属性和方法。
  • 构造函数中不需要 return 返回结果。
  • 当我们创建对象的时候,必须用 new 来调用构造函数。

遍历对象的属性

for...in 语句用于对数组或者对象的属性进行循环操作

for(变量 in 对象名字){
    // 在此执行代码
}

语法中的变量是自定义的,它需要符合命名规范,通常我们会将这个变量写为 k 或者 key。

var obj={
sex : '男',
age : 18
}


for(var k in obj) {
    console.log(k);		//输出得到的是属性名
    console.log(obj[k]);//这里的 obj[k] 是属性值
}
举报

相关推荐

0 条评论