V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  rabbbit  ›  全部回复第 89 页 / 共 120 页
回复总数  2397
1 ... 85  86  87  88  89  90  91  92  93  94 ... 120  
2018-12-24 18:05:11 +08:00
回复了 wangmingli 创建的主题 问与答 !
2018-12-24 15:14:05 +08:00
回复了 nohup 创建的主题 程序员 经过技术选型研究,我们放弃了 React,转向 Vue
厚黑学的完美实践
2018-12-22 03:26:41 +08:00
回复了 mason961125 创建的主题 天黑以后 20181222 午夜俱乐部
丰年好大雪
2018-12-22 01:43:32 +08:00
回复了 innoink 创建的主题 程序员 说中文命名的 来翻译一下
添加一个"特性"到某个"属性"中
通过一个"代理"连接到另一个"代理客户端"
2018-12-22 01:28:40 +08:00
回复了 fourstring 创建的主题 Vue.js 关于 Vue 中向一个组件的一个 prop 传递对象的问题
2018-12-21 21:36:50 +08:00
回复了 wly19960911 创建的主题 问与答 js 的 this 指向问题(并非基础)
更正
baseValue: bar,
referenced name: 'foo'
-->

baseValue: foo,
referenced name: 'bar'
2018-12-21 21:30:07 +08:00
回复了 wly19960911 创建的主题 问与答 js 的 this 指向问题(并非基础)
GetValue(v)这个内部函数的作用就是获取真实的那个值

文档这 https://www.w3.org/html/ig/zh/wiki/ES5/%E7%B1%BB%E5%9E%8B#GetValue
总结来说就是
如果不是 Reference,就直接返回 v.
如果 v 是 Reference,则 v 一定表示的是个对象 /环境记录项(<--可以理解成所谓的作用域)

如果 v 是表示对象的 Reference, 则调用内部方法 get
如果是环境记录项,则调用内部方法 GetBindingValue(标识符名, 是否是严格模式)

GetBindingValue(N,S)的文档在 https://www.w3.org/html/ig/zh/wiki/ES5/%E5%8F%AF%E6%89%A7%E8%A1%8C%E4%BB%A3%E7%A0%81%E4%B8%8E%E6%89%A7%E8%A1%8C%E7%8E%AF%E5%A2%83#GetBindingValue

总结来说就是
如果该变量未初始化,且不是严格模式,返回 undefined.否者报错
如果已初始化,则返回绑定的值(这步操作没说,我猜用的是 GetIdentifierReference)


往后看 GetIdentifierReference
https://www.w3.org/html/ig/zh/wiki/ES5/%E5%8F%AF%E6%89%A7%E8%A1%8C%E4%BB%A3%E7%A0%81%E4%B8%8E%E6%89%A7%E8%A1%8C%E7%8E%AF%E5%A2%83#GetIdentifierReference.28lex.2C_name.2C_strict.29

总结来说就是
在当前作用域找,没有就去递归去上一层找,直到全局对象 window,如果还没有,就返回 undefined
2018-12-21 21:11:48 +08:00
回复了 wly19960911 创建的主题 问与答 js 的 this 指向问题(并非基础)
函数调用的表达式是 CallExpression : MemberExpression Arguments

Arguments 就是函数后面的那个括号, MemberExpression 就是括号前面的东西

例如 (foo.bar)(1) MemberExpression 是 (foo.bar), Arguments 是 (1)

函数调用时,执行如下过程(以下记为 过程 a)
```
1 令 ref 为执行 MemberExpression 的结果
2 令 func 为调用 GetValue(ref)的结果
3 令 argList 为执行 Arguments 的结果
4 如果 func 不是 Object,抛出 TypeError
5 如果 func 没有内部属性[[call]],抛出 TypeError
6 如果 ref 是 Reference
a 如果 ref 的基值是 Boolean String Number Object //作为属性调用 // Es6 新增 Symbol
i 令 thisValue 为调用 GetBase(ref)的结果
否则, ref 的基值是环境记录 //作为变量调用
i 令 thisValue 为调用 GetBase(ref). ImplicitThisValue 的结果 // ImplicitThisValue 通常返回 undefined,除非 provideThis 值为 true(with 语句)
否则,ref 不是 Reference
令 thisValue 为 undefined // 进入函数时, thisVaule 为 undefined 会让 this 指向 window 全局对象
8 return func.[[call]](thisValue, argList)
```
函数本质上就是个 Object,有个内部方法[[call]],调用函数,本质上就是调用函数的内部方法[[call]]
```
F.[[call]](thisValue ,argList)
```
这个 thisValue 就是 this 值[在进入执行环境时,如果 thisValue 为 undefind, 则令 this 为 Global Object(浏览器里就是 window)]

所以过程 a 的执行过程就是先运行 MemberExpression,然后判断返回值.如果不是 Reference 类型, 令 thisValue 为 undefined

---
另外解释下什么是 Reference

js5 的类型有 Number Object Function null undefined String Boolean Reference
这个 Reference 是个虚假的概念,实际上不存在.作用是用来描述 delete 等操作,Reference 由 3 部分组成 base value referenced name strict reference flag
例如 foo.bar 返回的是个 Reference 结构如下
```
{
baseValue: bar,
referenced name: 'foo'
strict: false
}

```
再举个例子 function() {var foo = 1; var bar = 2}

这里的 foo 也返回一个 Reference
```
{
baseValue: {foo:1, bar: 2} <-- 这个可以理解为所谓的作用域
referenced name: 'foo'
strict: false
}

```
---

有没有 this 取决于 MemberExpression,那么,(foo.bar)返回的是什么?

()是群组运算符, 表达式为 PrimaryExpression : ( Expression )
运行过程是
```
返回执行 Expression 的结果。这可能是一个 Reference。
```
https://www.w3.org/html/ig/zh/wiki/ES5/%E8%A1%A8%E8%BE%BE%E5%BC%8F#.E7.BE.A4.E7.BB.84.E8.BF.90.E7.AE.97.E7.AC.A6

也就是返回什么取决于括号里边的 Expression (foo.bar)就是 foo.bar , (false || foo.bar)就是 false|| foo.bar

||操作的定义在
https://www.w3.org/html/ig/zh/wiki/ES5/%E8%A1%A8%E8%BE%BE%E5%BC%8F#.E4.BA.8C.E5.85.83.E9.80.BB.E8.BE.91.E8.BF.90.E7.AE.97.E7.AC.A6

注意第 5 步返回的是 GetValue(rref),不是 Reference.
2018-12-21 02:04:01 +08:00
回复了 codermagefox 创建的主题 问与答 我真的很讨厌为了名利所做的不负责任的内容产出
至于原因嘛 属性操作返回的是 Reference,|| 和 = 返回的是真实的那个值
2018-12-21 02:00:05 +08:00
回复了 codermagefox 创建的主题 问与答 我真的很讨厌为了名利所做的不负责任的内容产出
this 往下扣还真没几个教程能扣明白的
foo = {bar: function() {console.log(this)}}
(foo.bar)() // {bar: ƒ}
(false || foo.bar)() // Window
(foo.bar = foo.bar)() // Window
2018-12-20 00:15:06 +08:00
回复了 cjw1115 创建的主题 问与答 经常刷抖音,不幸福感骤增?
1818 才是快乐的源泉
页面有什么兼容性要求吗?
前端页面部分不复杂可以免费帮你写,有兴趣留个微信
2018-12-18 15:01:20 +08:00
回复了 rizon 创建的主题 程序员 JS 的 substring split regex 哪个效率高?
实际上没多大差别,哪个方便用哪个
那 js 刷 leetcode 另算
2018-12-18 14:55:51 +08:00
回复了 rizon 创建的主题 程序员 JS 的 substring split regex 哪个效率高?
2018-12-17 20:58:14 +08:00
回复了 KasuganoSoras 创建的主题 全球工单系统 给 V2EX 一点小建议
可以用 Home 键返回顶部
2018-12-17 20:34:19 +08:00
回复了 ilaipi 创建的主题 酷工作 web 前端招聘咨询
楼上又双叒叕失业了...
然而我还没找着工作
2018-12-15 21:16:33 +08:00
回复了 SomeBottle 创建的主题 分享创造 简单写了一个能用的弹幕 js——N.js
2018-12-14 17:23:04 +08:00
回复了 a566 创建的主题 问与答 在传智学前端 出去有活路吗
CSS JS 应该入门了吧
2018-12-14 17:15:13 +08:00
回复了 arzterk 创建的主题 编程 这个题目我算的是不是对的
一步两步,走到 n 有多少种走法,应该是斐波
试试用 width 和 height attribute 代替 CSS

<img width="100" height="100">
这样做图片未加载时也是固定宽高
1 ... 85  86  87  88  89  90  91  92  93  94 ... 120  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3848 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 48ms · UTC 00:55 · PVG 08:55 · LAX 16:55 · JFK 19:55
Developed with CodeLauncher
♥ Do have faith in what you're doing.