前端概念复习和VUE初学

这篇博客主要涉及前端概念复习,包括JS语法、严格模式、this指向、块级作用域等内容,并深入探讨Vue框架的学习,如CommonJS和ESM模块系统。作者还计划复习jQuery框架。目前,JS复习已完成大部分,Vue学习正在进行中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前端概念复习和VUE初学

昨天进展到了JS的变量提升,接着昨天的进度开始

疑问:

1.严格模式下使用构造函数时,如果忘了加new,this不再指向全局对象,而是报错。(啥意思?)

function f(){
    "use strict";
    this.a = 1;
};
f();// 报错,this未定义

问题已经解决,文末给出解释。

任务一:JS语法复习

question1:变量提升

函数和变量声明总是被放到顶部,意味着可以先使用后声明

x = 5; // 变量 x 设置为 5

elem = document.getElementById("demo"); // 查找元素 
elem.innerHTML = x;                     // 在元素中显示 x

var x; // 声明 x  

初始化不提升 ,下面代码的输出x 为:5,y 为:undefined

 var x = 5; // 初始化 x

elem = document.getElementById("demo"); // 查找元素 
elem.innerHTML = x + " " + y;           // 显示 x 和 y

var y = 7; // 初始化 y  

question2:严格模式

不允许使用未声明的变量:

不允许删除变量或对象。

不允许删除函数。

不允许变量重名

"use strict";
function x(p1, p1) {};   // 报错

不允许使用八进制:

"use strict";
var x = 010;             // 报错

不允许使用转义字符:

"use strict";
var x = \010;            // 报错

不允许对只读属性赋值:

"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});

obj.x = 3.14;            // 报错  

禁止this关键字指向全局对象。

function f(){
    return !this;
} 
// 返回false,因为"this"指向全局对象,"!this"就是false

function f(){ 
    "use strict";
    return !this;
} 
// 返回true,因为严格模式下,this的值为undefined,所以"!this"为true。

不允许对一个使用getter方法读取的属性进行赋值

"use strict";
var obj = {get x() {return 0} };

obj.x = 3.14;            // 报错

为了向将来Javascript的新版本过渡,严格模式新增了一些保留关键字:

implements interface let package private protected public static yield

"use strict";
var public = 1500;      // 报错

question3:浮点数精度问题

想用有限的位来表示无穷的数字,显然是不可能的,因此会出现一些列精度问题:

浮点数精度问题,比如 0.1 + 0.2 !== 0.3

大数精度问题,比如 9999 9999 9999 9999 == 1000 0000 0000 0000 1

toFixed 四舍五入结果不准确,比如 1.335.toFixed(2) == 1.33

目前已经有了很多较为成熟的库,比如 bignumber.jsdecimal.js,以及big.js等。我们可以根据自己的需求来选择对应的工具。

教程中提到的parseFloat(result.toFixed(12));进行四舍五入,还有先浮点数变整数0.1 + 0.2转化为(1*2)/3。可是这些方法都不大行。

question4:this指向谁

this指向对象,指向的对象也是函数的调用者。

function func(){
            console.log(this);
        }
        //① 通过函数名()直接调用:this指向window
        func(); // this--->window
function func(){
           console.log(this);
        }

//② 通过对象.函数名()调用的:this指向这个对象
           // 狭义对象
            var obj = {
                name:"obj",
                func1 :func
            };
            obj.func1(); // this--->obj
            

        // 广义对象
        document.getElementById("div").onclick = function(){
            this.style.backgroundColor = "red";
        }; // this--->div
function func(){
            console.log(this);
        }
        
//③ 函数作为数组的一个元素,通过数组下标调用的:this指向这个数组
        var arr = [func,1,2,3];
        arr[0]();  // this--->arr
function func(){
            console.log(this);
        }
        

//④ 函数作为window内置函数的回调函数调用:this指向window,( setInterval ///setTimeout 等)
        setTimeout(func,1000);// this--->window
        //setInterval(func,1000);
function func(){
            console.log(this);
        }
//⑤ 函数作为构造函数,用new关键字调用时:this指向新new出的对象
        var obj = new func(); //this--->new出的新obj

question5:块级作用域

let 声明的变量只在 let 命令所在的代码块 {} 内有效,在 {} 之外不能访问。

{ 
    let x = 2;
}
// 这里不能使用 x 变量

但是var不受块的限制

var x = 10;
// 这里输出 x 为 10
{ 
var x = 2;
// 这里输出 x 为 2
}
// 这里输出 x 为 2

为了解决这个问题,我们就用let就好了

var x = 10;
// 这里输出 x 为 10
{ 
let x = 2;
// 这里输出 x 为 2
}
// 这里输出 x 为 10

question6:使用构造函数调用函数

// 构造函数:
function myFunction(arg1, arg2) {
this.firstName = arg1;
this.lastName  = arg2;
}
// This    creates a new object
var x = new myFunction("John","Doe");
x.firstName;                             // 返回 "John"

构造函数的调用会创建一个新的对象。新对象会继承构造函数的属性和方法。

构造函数中 this 关键字没有任何的值。 this 的值在函数调用实例化对象(new object)时创建。

question7:call和apply() 这个见得很少,等日后遇到更多例子来加深理解,目前对其的作用理解为,可以调用非本对象的方法,对象结构体里面没这么定义,但能把函数拿来用。

var myObject;
function myFunction(a, b) {
    return a * b;
}
myObject = myFunction.call(myObject, 10, 2);    // 返回 20
var myObject, myArray;
function myFunction(a, b) {
    return a * b;
}
myArray = [10, 2]
myObject = myFunction.apply(myObject, myArray);      // 返回 20

两个方法都使用了对象本身作为第一个参数。 两者的区别在于第二个参数: apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。

在 JavaScript 严格模式(strict mode)下, 在调用函数时第一个参数会成为 this 的值, 即使该参数不是一个对象。

在 JavaScript 非严格模式(non-strict mode)下, 如果第一个参数的值是 null 或 undefined, 它将使用全局对象替代。

通过 call() 或 apply() 方法你可以设置 this 的值, 且作为已存在对象的新方法调用。

question8:内嵌函数(基础不够过关,这部分竟然没想起来)

function add() {
var counter = 0;
function plus() {counter += 1;}
plus();    
return counter; 
}//这样可以避免网页上任意脚本修改全局变量的值导致无法计数

question9:json字符串转换为 JavaScript 对象,今日任务大多结束后复习一下json字符串

var text = '{ "sites" : [' +
	'{ "name":"Runoob" , "url":"www.runoob.com" },' +
	'{ "name":"Google" , "url":"www.google.com" },' +
	'{ "name":"Taobao" , "url":"www.taobao.com" } ]}';
	
obj = JSON.parse(text);
document.getElementById("demo").innerHTML = obj.sites[1].name + " " + obj.sites[1].url;

任务二:Vue框架学习

question1:CommonJS

CommonJS定义的模块分为:{模块引用(require)} {模块定义(exports)} {模块标识(module)}

require()用来引入外部模块;exports对象用于导出当前模块的方法或变量,唯一的导出口;module对象就代表模块本身。

nodejs是CommonJS规范的实现。

question2:ESM

https://segmentfault.com/a/1190000014318751贴上查到的用图讲解ESM的博客

初读印象不够,其中几个关键点有异步和循环依赖大致理解,需要日后运用中反复。

question3:Vue.js是什么

1.渐进式框架,意味着可以在中途引入vue框架来改善项目

2.视频介绍中Vue可以在控制台改动对象数据,同时修改了页面和后台的js代码

待做任务:JQuery框架的复习

(留到Vue学习完成之后)

疑问解决:首先,this指向调用他的对象,意味着疑问中的this本应该指向window,但严格模式下this指向空,这里用new的意思是用

var A = new f();//这样是不会报错的,因为this指向了A这个对象。

今日任务进展:

1.js复习基本搞定

2.笔记本上把nodejs npm Vue一条龙装下来,阅读Vue教程到第一个demo处

明日任务要求:

个人对于Vue的难度没有把握,明天继续Vue教程阅读,争取一天之内完成官网教程通读并实现绝大部分demo。如果还有时间就看看json,回忆一下加深印象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值