一、javascript函数

1.普通函数

function func(){
}

2.匿名函数

setInterval(function(){
console.log(123);
},5000)

3.自执行函数

多数情况下可能会引入别人的js,如果别人的js函数重复,会导致一个不能用,为了避免这个问题,把内部所有的功能放到函数里面。做成一个嵌套函数。

但是如果外面的函数名也有重复,怎么处理,就外边的函数没有名字,并且自动执行一下。

自执行函数怎么写呢?

//  ()():第一个括号function,第二个括号传实参。创建函数,并且自动执行
(function(arg){
console.log(arg);
})(1)

二、javascript序列化及转义

  • 常用的序列化操作
li = [11,22,33,44]
s = JSON.stringify(li) // 把对象转化为字符串
newL = JSON.parse(s) // 把字符串转化为对象
  • 转义

比如网上搜一个东西,网址自动变成了%等一些内容

>  url = "https://www.sogou.com/web?query=时间"
< "https://www.sogou.com/web?query=时间"
> newUrl = encodeURI(url) // 转义
< "https://www.sogou.com/web?query=%E6%97%B6%E9%97%B4"
> decodeURI(newUrl) // 转回原格式
< "https://www.sogou.com/web?query=时间"
> newUrl = encodeURIComponent(url) // 全部转义
< "https%3A%2F%2Fwww.sogou.com%2Fweb%3Fquery%3D%E6%97%B6%E9%97%B4"

默认http请求不是长链接,连一次就断了,但是网站有保持登录一个月,怎么实现的。

一般登录成功后,网站会给你发一段字符串过来,把它保存在硬盘的某个地方。这就是cookie。

客户端(cookie) =》 服务器端 。 将数据经过转义后,保存在cookie

escape( )          // 对字符串转义
unescape( ) // 给转义字符串解码
URIError // 由URl的编码和解码方法抛出

三、eval以及时间操作

  • eval

在Python中:

val = eval(" 1+1 ")    # 表达式
exec(" 执行代码 ") # 比如for循环。但exec只是执行,没有返回值

JavaScript中:

eval :功能是python里eval和exec的合集

  • 时间操作
>  d = new Date()
Mon Nov 28 2016 22:46:33 GMT+0800 (中国标准时间)
> d.getMinutes()
46
> n = d.getMinutes() + 12
58
> d.setMinutes(n)
1480345113329
> d
Mon Nov 28 2016 22:58:33 GMT+0800 (中国标准时间) // Date类
// var d = new Date() 当前时间
// d.getXXX 获取
// d.setXXX 设置

四、javascript作用域

1.javascript以函数作为作用域(let除外)

  • java、c、c# 等语言是以“{}”代码块 作为作用域的。
  • Python中:作用域是以函数作为作用域的。
  • JavaScript:也是以函数作为作用域的

2.函数的作用域在函数未被调用之前,已经创建

3.函数的作用域存在作用域链,并且也是在被调用之前创建

作用域链:嵌套函数,作用域一层套一层

以下三个示例,分别会输出什么?

// 示例一:
xo = "alex";
function func(){
// var xo = 'eric';
function inner(){
// var xo = 'tony';
console.log(xo);
}
inner()
}
func() // 示例二:
xo = "alex";
function func(){
var xo = 'eric';
function inner(){
console.log(xo);
}
return inner;
}
var ret = func()
ret() // 示例三:
xo = "alex";
function func(){
var xo = 'eric';
function inner(){
console.log(xo);
}
var xo = 'tony';
return inner;
}
var ret = func()
ret()
// 注:浏览器console中换行,使用shift+回车

函数的作用域存在作用域链,并且也是在被调用之前创建

4.函数内部变量 声明提前

  // 示例一:
function func(){
console.log(xxoo);
}
func();
// 程序直接报错 function func(){
console.log(xxoo);
var xxoo = 'alex';
}
// 解释过程中:var xxoo;
func();
// undefined

未赋值变量,提前声明为 undefined

>  var fgf
undefined
> fgf
undefined

五、javascript面向对象

  • this代指对象(python self)
  • 创建对象时, new 函数名()
function Foo(n){
this.name = n;
this.sayName = function(){
console.log(this.name);
}
} var obj1 = new Foo('we');
obj1.name
obj1.sayName() var obj2 = new Foo('wee');
obj2.name
obj2.sayName()

上面那么写可以,但是有个问题,里面有些内容被重复定义了,sayName这个方法在每个对象里都被重复定义了一次。

  • Python的面向对象:方法保存在类内存中
class Foo:
def __init__(self,name):
self.name = name def sayName(self):
print(self.name) obj1 = Foo('we')
obj2 = Foo('wee')
  • JavaScript面向对象 —> 原型:

原型:避免浪费内存资源

function Foo(n){
this.name = n;
}
// Foo的原型
Foo.prototype = {
'sayName': function(){
console.log(this.name)
}
} obj1 = new Foo('we');
obj1.sayName() obj2 = new Foo('wee');

六、javascript 词法分析解析

如下代码,分别会对应输出什么?

 function t1(age){
console.log(age); // function age()
var age = 27;
console.log(age); // 27
function age(){} // 执行时,因为没有调用,所以执行时不考虑
console.log(age); // 27
} t1(3);

active object ——> 简称AO 
1. 形式参数 
2. 局部变量 
3. 函数声明表达式(优先级比较高)

下面开始分析:

  • 形式参数: 
    AO.age = 3;
  • 局部变量: 
    AO.age = 27;
  • 函数声明表达式 
    AO.age = function()

作用域值的分析,也可以通过词法分析,去分析

前端逼死强迫症系列之javascript续集的更多相关文章

  1. 前端逼死强迫症系列之javascript

    JavaScript 和Python.C#.Java.Ruby一样,都是一门独立的编程语言. 像python.C.Java等都需要解释器,学习它们的语法.而浏览器本身就是javascript的解释器. ...

  2. 前端逼死强迫症系列之Html

    概述 HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都来遵守他,这样就可以让浏览器 ...

  3. 前端逼死强迫症系列之css

    一.编写css样式 1.ID选择器 由于ID唯一,所以也是写多遍. <head> <style> #i1{ background-color: #2459a2; height: ...

  4. 前端逼死强迫症之css续集

    上节内容回顾 如果点击图片调转到连接,a标签下套img标签,在IE有的版本中,会有蓝色边框. 因为a标签默认字体颜色就是蓝色,img标签继承了父级标签,而IE浏览器默认给边框加了宽度.解决: < ...

  5. 前端逼死强迫症之DOM

    Dom:document.相当于把所有的html文件,转换成了文档对象. 之前说过:html-裸体的人:css-穿上衣服:js-让人动起来. 让人动起来,就得先找到他,再修改它内容或属性. 找到标签 ...

  6. 【PC网站前端架构探讨系列】关于中小型PC网站前端架构方案的讨论与实践

    目   录 1.遇到的问题 2.目标 3.探讨 4.架构设想 5.流程 6.初步实现 7.存在问题 8.最后 遇到的问题 我在这个系列上篇文章 已经讲解并开始逐步应用模块化思想,不知大家还记不记得,题 ...

  7. 前端回顾:2016年 JavaScript 之星

    JavasScript社区在创新的道路上开足了马力,曾经流行过的也许一个月之后就过时了.2016已经结束了.你可能会想你是否错过一些重要的东西?不用担心,让我们来回顾2016年前端有哪些主流.通过比较 ...

  8. 15分钟带你了解前端工程师必知的javascript设计模式(附详细思维导图和源码)

    15分钟带你了解前端工程师必知的javascript设计模式(附详细思维导图和源码) 前言 设计模式是一个程序员进阶高级的必备技巧,也是评判一个工程师工作经验和能力的试金石.设计模式是程序员多年工作经 ...

  9. 王下邀月熊_Chevalier的前端每周清单系列文章索引

    感谢 王下邀月熊_Chevalier 分享的前端每周清单,为方便大家阅读,特整理一份索引. 王下邀月熊大大也于 2018 年 3 月 31 日整理了自己的前端每周清单系列,并以年/月为单位进行分类,具 ...

随机推荐

  1. elk 流程图

    ELK流程图 单纯使用ElK实现分布式日志收集缺点: 1.logstash太多了,扩展不好. 2.读取IO文件,可能会产生日志丢失 3.不是实时性 这时候就需要引入 kafka. kafka基于主题模 ...

  2. 在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题)

    原文:在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉 ...

  3. C#用户控件实战01_CSS布局

    很多应用系统的主页布局,一般采用如下案例所示布局较多,如下图的CSS布局框架,上.中.下,接下来我们演示,在C#中实现如下的业务架构布局. 代码范例: 在<body></body&g ...

  4. github上更新fork的别人的项目

    直接上解决方案的步骤 (1)在自己fork后的项目的位置上,点击New pull request. (2)比较和原创版本(base)的变化 (3 ) compare across forks. 使得左 ...

  5. HTML中的图片标签的用法!

    在HTML中<img>这个标签是定义文本中的图片标签,它的作用就比如说可以提供图片的名字.提供图片的尺寸大小和提供图片的一些图片属性,比如Alt这个属性,可以给图片一个名称来告诉朋友们.这 ...

  6. Python3 实例

    一直以来,总想写些什么,但不知从何处落笔. 今儿个仓促,也不知道怎么写,就把手里练习过的例子,整理了一下. 希望对初学者有用,都是非常基础的例子,很适合初练. 好了,Follow me. 一.Pyth ...

  7. Django之过滤器

    Django 过滤器   过滤器 描述 示例 upper 以大写方式输出 {{ user.name | upper }} add 给value加上一个数值 {{ user.age | add:”5” ...

  8. imx6q 启动logo

    转:https://wenku.baidu.com/view/81fa0f3982c4bb4cf7ec4afe04a1b0717fd5b30e.html?rec_flag=default&sx ...

  9. Java面试题及答案解析

    面向对象编程(OOP) Java是一个支持并发.基于类和面向对象的计算机编程语言.下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可靠性和灵活性. 增加代码 ...

  10. python RSA加密、解密、签名

    python RSA加密.解密.签名 python中用于RSA加解密的库有好久个,本文主要讲解rsa.M2Crypto.Crypto这三个库对于RSA加密.解密.签名.验签的知识点. 知识基础 加密是 ...