js不好学并不是因为它难,而是因为它容易混淆
这段时间我主讲的前端零基础课,让我感觉js这东西是越来越简单了。你当然可以说我这是越讲课越熟。确实是有这部分因素,但更主要的是,我发现js中虽然有许多的概念各不相同,但在具体的代码实现中,基本都是非常类似,甚至是完全一样的。这就导致前端新人在学习的过程中,学着学着,就分不清谁是谁了。
例如在27号的课程中,主要讲js的自定义对象。在课程中提到了,函数,方法,对象,又加个构造器,,这就已经四个概念了,但使用代码表现出来,
function abc(){
console.log('abc')
}
全都是一样的,就是一个名为abc的function,你单独的写一个,
function abc(){
console.log('abc')
}
这就是个孤立的函数。
//-------------
function abc(n){
console.log(n)
}
这时,你可以称,它是个接收参数并输出的方法。
//-------------
但同时,函数还是个对象!因为要把它赋值给变量然后调用
Function
//-------------
function abc(){
console.log('abc')
}
new abc();
此时,这个abc函数又是个构造器
//-------------
那么它们什么时候是函数,什么时候是方法,什么时候是对象,又是什么时候是构造器?全看你想怎么去使用它们。
但对于新人来讲,有时就晕了,明明刚才还说是声明一个函数,怎么到这就变成构造器了?
再看什么私有方法,公共方法,全局变量,局部变量,
其实不过是写在函数外面或是里面的匿名函数和变量而已。说到底就是函数和变量。但却因为使用方式和环境的不同,搞出这么多名字。
这在我个人看来,还是因为js太过简单,但又要承载复杂的功能,只能是人为的用各种手段和名称去区分。
//-------------
js还有些明明很简单,我总觉得各种教程写的有些过于复杂了,也许是我理解的还不到位吧。
不说别的,就单说prototype和constructor,无非是函数里有个prototype属性,然后prototype里有个对象,这个对象里有个constructor,然后这个constructor的值是它所在的那个函数。。,就像这样:
简单吧,就是个一个套着一个的关系。但看网上的教程,什么引用,包含,指向,画的图也左一道又一道的,看不懂。
//-------------
再来说闭包,啥叫闭包?
图上画的很清楚,那个返回的子函数及其作用域,就是闭包。
但看看网上关于闭包的资料,很多写的,,反正我开始时在学js的时候,看闭包是很久也理解不了。
//-------------
就不多说了,js当然也不简单,依然是很复杂的东西,需要大量的代码练习才能掌握。但既然我已经懂了,明白了。那么在我这里,就是怎么简单怎么讲,能一句话说明白就不用二句话。
在我看来,有时间多讲讲代码实现,比我费挺大劲给你讲明白一个概念,要重要的多。
- 我的WCF之旅(4):WCF中的序列化[上篇]
- WCF技术剖析之二十八:自己动手获取元数据[附源代码下载]
- 微信年度重磅“小游戏”上线,罗胖一度退出的小程序正在逆袭
- 谈谈WCF中的Data Contract(2):WCF Data Contract对Generic的支持
- Android注解学习(1)
- [WCF权限控制]ASP.NET Roles授权[上篇]
- [WCF权限控制]ASP.NET Roles授权[下篇]
- 如何解决分布式系统中的跨时区问题[实例篇]
- Visual Studio对程序集签名时一个很不好用的地方
- 一个关于解决序列化问题的编程技巧
- [WCF权限控制]从两个重要的概念谈起:Identity与Principal[上篇]
- 从数据到代码——通过代码生成机制实现强类型编程[下篇]
- 谈谈你最熟悉的System.DateTime[下篇]
- 如何解决EnterLib异常处理框架最大的局限——基于异常"类型"的异常处理策略
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【redis】02-redis持久化存储以及对象存储
- Kubernetes 集群可视化监控之 Weave Scope 入门
- h5 与原生 app 交互的原理
- 怎么在Openresty中REST?
- 【redis】04-redis 根据监听key的失效事件实现订单超时关闭
- 搭建分布式任务调度平台
- 微信小程序根据线上版本 Source Map 文件定位错误代码
- 全解系列:内存泄漏定位工具LeakCanary!
- 【Java反射】触手可及
- 【Flutter 专题】100 何为 Flutter Widgets ?
- Python爬虫 爬取豆瓣电影Top250信息
- Python编程 基础练习(一)
- Python编程 基础练习(二)
- python数据可视化 豆瓣电影top250数据分析
- R语言实现分子信息获取